You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从Pandas DataFrame提取嵌套JSON字段的技术咨询

从Pandas DataFrame提取嵌套JSON字段(Twitter数据场景)

我来帮你搞定从Pandas DataFrame里提取嵌套JSON字段的问题,结合你用Tweepy+jsonpickle生成Twitter数据的场景,给你几个实用的方案:


第一步:加载jsonpickle生成的JSON数据到DataFrame

因为jsonpickle序列化的内容不是标准JSON,得先反序列化再转成DataFrame:

import jsonpickle
import pandas as pd

# 读取你的Twitter数据文件
with open('twitter_data.json', 'r') as f:
    # 用jsonpickle反序列化内容
    deserialized_data = jsonpickle.decode(f.read())

# 转成Pandas DataFrame
df = pd.DataFrame(deserialized_data)

方法1:用apply+Lambda提取单层嵌套字段

如果只是提取单层嵌套的简单字段(比如推文作者的昵称),这种方法直接高效:

# 提取用户昵称(从嵌套的user字段里取screen_name)
df['author_username'] = df['user'].apply(lambda x: x['screen_name'])

# 处理可能为空的嵌套字段(比如转发推文的点赞数)
df['retweet_likes'] = df['retweeted_status'].apply(lambda x: x['favorite_count'] if x is not None else 0)

方法2:用pd.json_normalize扁平化复杂嵌套结构

Twitter数据里的user、entities都是多层嵌套的结构,json_normalize能直接把嵌套字段拆成单独的列,非常省心:

# 直接把整个反序列化后的数据集展平成DataFrame
flattened_df = pd.json_normalize(deserialized_data)

# 如果已经有原始DataFrame,也可以单独展平某一列
# 比如展平user列的所有子字段
user_details = pd.json_normalize(df['user'])
# 把展平后的用户信息和原DataFrame合并,同时删掉原来的user列
df = pd.concat([df.drop('user', axis=1), user_details], axis=1)

展平后你会得到类似user.id、user.location、entities.hashtags这样的列名,直接就能用。

方法3:处理数组类型的深层嵌套字段

比如推文里的话题标签(entities.hashtags)是数组嵌套,要提取里面的内容可以这么做:

# 把所有话题标签转成逗号分隔的字符串
df['hashtags'] = df['entities'].apply(lambda x: ','.join([tag['text'] for tag in x['hashtags']]) if x['hashtags'] else None)

# 如果想把每个话题标签拆成单独的行,用explode
df_hashtags = df.explode('hashtags')

小提醒

  • 一定要处理空值:有些推文可能没有转发内容、话题标签这类字段,所以在apply里加个判断(比如if x is not None),避免报错。
  • jsonpickle的坑:别直接用pd.read_json()读取jsonpickle生成的文件,必须用jsonpickle.decode()先反序列化。

内容的提问来源于stack exchange,提问作者Rahul Agarwal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:40:26