解析 df 中的 JSON 列并提取特定键值

Parse a JSON column in a df and extract specific key value

我有一个 pandas DataFrame,其中包含一个带有嵌套 JSON 字典的列。我想规范化 JSON 列 ('media') 并提取存在的键 'url' 的值。 'media' json 有效载荷具有三种类型的可能媒体对象,所有这些都包含在示例数据集中。我只需要从 'MessageMediaWebPage' 对象中提取。

使用

后的典型错误(虽然有一些变化)
# Using JSON normalize function

pd.json_normalize(df['media'], max_level=1)

AttributeError: 'str' object has no attribute 'values'

下面列出了完整的错误

JSON 格式的数据和代码示例。示例数据集仅包含三个记录,但太大而无法直接 post。 link 是我的 git:

# The json is nested
# The full data set consists of several columns and 40K + records. This is just a small slice.

df = pd.read_json('https://raw.githubusercontent.com/whitedl/telegram/main/df_3.json', dtype = {'telegram_id':object}) 

df.info()

pd.json_normalize(df['media'], max_level=1)

作为背景,我尝试了以下解决方案:

问题是媒体列中的值是字符串类型。您可以将 ast.literal_eval 应用于媒体列以将其值转换为 python 字典。

import ast 


pd.json_normalize(df['media'].apply(ast.literal_eval), max_level=1)