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

如何将包含嵌套对象列表的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 10:15:05