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

如何将嵌套JSON扁平化处理为指定格式的DataFrame?

扁平化嵌套JSON并生成指定格式的DataFrame

你需要将嵌套JSON扁平化,把嵌套层级用下划线连接为列名,当前代码生成的结果存在多余的data列,且data子字段的列名缺少data_前缀,无法匹配预期格式。

修改后的代码

import pandas as pd
import json

json_data = '''
{
    "appVersion": "0.0.3",
    "device": {
        "model": "Lenovo"
    },
    "bef": {
        "catalog": "Manual"
    },
    "data": [
        {
            "timestamp": "2024-04-24 12:08:02.415077",
            "label": "zuf",
            "category": "50"
        }
    ]
}
'''
parsed_json = json.loads(json_data)

# 利用json_normalize一次性处理嵌套结构和数组展开
df = pd.json_normalize(
    parsed_json,
    record_path='data',  # 指定要展开的数组字段
    meta=[
        'appVersion',
        ['device', 'model'],  # 嵌套字段的层级路径
        ['bef', 'catalog']
    ],
    sep='_'  # 嵌套字段的连接符
)

# 调整列顺序并重命名data相关字段
df = df[['appVersion', 'device_model', 'bef_catalog', 'timestamp', 'label', 'category']]
df = df.rename(columns={
    'timestamp': 'data_timestamp',
    'label': 'data_label',
    'category': 'data_category'
})

# 可选:将时间戳截取为三位小数格式
df['data_timestamp'] = df['data_timestamp'].str[:23]

print(df)

代码说明

  • record_path='data':告诉json_normalize展开data数组中的每个对象,作为DataFrame的行数据
  • meta参数:指定需要从JSON顶级结构中提取的字段,嵌套字段用列表表示层级(如['device', 'model'])
  • sep='_':自动将嵌套字段的层级转换为下划线连接的列名,比如device.model变为device_model
  • 最后调整列顺序并给原data数组内的字段添加data_前缀,完全匹配你期望的格式
  • 时间戳截取是可选操作,用于和你给出的预期结果格式保持一致

运行结果

appVersion device_model bef_catalog     data_timestamp data_label data_category
0      0.0.3        Lenovo      Manual 2024-04-24 12:08:02.415        zuf            50

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 22:36:36