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

如何将多层JSON高效转换为指定格式的Pandas DataFrame?

高效转换多层JSON到Pandas DataFrame的方案

直接用pd.json_normalize的参数组合就能搞定,不用写繁琐的循环。核心是正确指定record_path和meta参数,把需要重复的上层字段(顶级属性、单帧metadata)关联到每个detection条目上。

示例JSON结构(模拟你的3D相机数据)

sample_json = {
    "attribute1": "cam_001",
    "attribute2": "indoor",
    "data": [
        {
            "metadata": {"timestamp": 1620000000, "frame_id": 1, "resolution": "1080p"},
            "detections": [
                {"dim1": 1.2, "dim2": 0.8, "class": "person"},
                {"dim1": 0.9, "dim2": 1.1, "class": "box"}
            ]
        },
        {
            "metadata": {"timestamp": 1620000001, "frame_id": 2},
            "detections": [
                {"dim1": 1.5, "dim2": 0.7, "class": "person"}
            ]
        }
    ]
}

核心代码实现

import pandas as pd

# 手动指定要提取的metadata字段(适合结构固定的场景)
df = pd.json_normalize(
    sample_json,
    # 指定要展开为行的数组:data下的detections列表
    record_path=['data', 'detections'],
    # 指定需要从上层嵌套中提取并重复的字段
    meta=[
        'attribute1',          # 顶级字段
        'attribute2',          # 顶级字段
        ['data', 'metadata', 'timestamp'],  # 单帧metadata字段
        ['data', 'metadata', 'frame_id'],   # 单帧metadata字段
        ['data', 'metadata', 'resolution']  # 可选:如果部分帧缺失,errors='ignore'会自动填充NaN
    ],
    errors='ignore'  # 忽略缺失字段的报错
)

# 可选:重命名列,去掉冗余的前缀
df.columns = df.columns.str.replace('data.metadata.', '')

# 输出结果
print(df)

灵活适配任意metadata字段(自动遍历)

如果metadata的字段不确定或太多,不想手动罗列,可以自动提取所有metadata键:

# 假设所有帧的metadata结构一致,取第一帧的键生成meta字段列表
metadata_keys = sample_json['data'][0]['metadata'].keys()
meta_fields = [['data', 'metadata', key] for key in metadata_keys]

# 组合顶级字段和自动生成的metadata字段
full_meta = ['attribute1', 'attribute2'] + meta_fields

df = pd.json_normalize(
    sample_json,
    record_path=['data', 'detections'],
    meta=full_meta,
    errors='ignore'
)

# 重命名列
df.columns = df.columns.str.replace('data.metadata.', '')

结果说明

最终的DataFrame会把每个detection作为一行,对应的顶级属性(attribute1/attribute2)和该帧的metadata字段(timestamp/frame_id等)会自动重复填充,完全符合你的需求。

优势对比

相比手动循环,这种方法利用Pandas内部优化的向量化操作,处理大数据量时速度快很多,代码也更简洁易维护。

内容的提问来源于stack exchange,提问作者André Lourenço

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 05:05:28