如何将包含嵌套对象列表的JSON扁平化为pandas DataFrame
嵌套JSON转扁平化DataFrame最优实现方案
直接使用pandas内置的pd.json_normalize配合透视操作即可实现需求,比自定义行遍历apply的方案效率高1~2个数量级,代码量大幅缩减,同时支持自动识别所有event列名,无需硬编码。
完整实现代码
import pandas as pd import json # 读取原始JSON文件 with open("test1.json", "r", encoding="utf-8") as f: raw_json = json.load(f) # 第一步:展开顶层data数组,保留公共字段 base_df = pd.json_normalize( raw_json, record_path="data", meta=["documentName", "time"] ) # 第二步:展开嵌套的scores数组,提取event和score字段 expanded = base_df.explode("scores", ignore_index=False) score_detail = expanded["scores"].apply(pd.Series) # 合并数据并透视得到最终宽表 result = base_df.join(score_detail).pivot_table( index=["documentName", "time", "name"], columns="event", values="score", aggfunc="first" ).reset_index().rename_axis(columns=None) # 可选:将默认NaN空值替换为None result = result.where(pd.notna(result), None)
方案优势
- 全部使用pandas内置矢量化操作,避免了行级遍历,数据量较大时运行速度提升非常明显
- 代码简洁无需自定义转换函数,可维护性更高
- 兼容空scores数组的场景,自动识别所有event的名称和数量,无需提前硬编码列名
内容的提问来源于stack exchange,提问作者Erik van de Ven
相关产品推荐
相关产品推荐

