如何在Pandas中从JSON DataFrame提取指定字段?
解决嵌套字典列的展开问题
方法1:一步到位读取并解析
别先读成只有data列的DataFrame,直接用pd.json_normalize搞定嵌套结构:
import pandas as pd # 读取原始JSON后直接解析data字段里的嵌套数据 df = pd.json_normalize(pd.read_json("./data/data.json")['data'])
这样出来的DataFrame直接把id、timestamp这些字段当成列,不用再折腾。
方法2:处理已读入的DataFrame
如果已经拿到了只有data列的DataFrame,用下面两种方式展开:
- 方式A:用
apply(pd.Series)拆字典列
# 把data列里的每个字典转成单独的列 expanded_df = df['data'].apply(pd.Series)
要是原DataFrame还有其他列,就把它们合并起来:
# 合并原表(去掉data列)和展开后的表 final_df = pd.concat([df.drop('data', axis=1), expanded_df], axis=1)
- 方式B:用
pd.json_normalize处理现有data列
和方法1同理,直接解析data列里的字典:
expanded_df = pd.json_normalize(df['data']) final_df = pd.concat([df.drop('data', axis=1), expanded_df], axis=1)
额外提示
- 要是字典里还有更深的嵌套层级,
pd.json_normalize支持record_path和meta参数精准解析,比apply(pd.Series)更可靠。 - 数据量较大时,
pd.json_normalize的性能更好,优先用这个方案。
内容的提问来源于stack exchange,提问作者mrpbennett
相关产品推荐
相关产品推荐

