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

如何使用json_normalize多层解析并合并Pandas DataFrame?

解决方法

1. 解析嵌套数组时直接保留关联键

不要单独解析steps,而是在pd.json_normalize中通过record_path指定嵌套数组路径,同时用meta参数把原数据里的value字段(或其他需要关联的标识字段)一并保留,这样生成的df_normal自带关联键,直接就能和df_channel连接。

假设你的原始JSON结构示例如下:

[
  {
    "value": "channel_001",
    "progression": {
      "steps": [{"step_id": 1, "action": "init"}, {"step_id": 2, "action": "process"}]
    },
    "desc": "test channel"
  }
]

对应解析代码:

import pandas as pd

# 假设原始JSON数据存储在data变量中
df_normal = pd.json_normalize(
    data,
    record_path=['progression', 'steps'],  # 指定嵌套的steps数组路径
    meta=['value']  # 保留关联键value
)

此时df_normal包含value字段,直接执行左连接即可:

merged_df = df_channel.merge(df_normal, on='value', how='left')

2. 已生成无关联键的df_normal时补全键

如果已经得到了df_channel和无关联键的df_normal,可以通过索引对齐+字段展开的方式补全关联键:

# 先计算每个channel对应的steps数量
df_channel['steps_len'] = df_channel['progression'].apply(lambda x: len(x['steps']) if x.get('steps') else 0)
# 按steps_len重复value字段,生成和df_normal行数匹配的关联键列表
expanded_values = df_channel['value'].repeat(df_channel['steps_len']).reset_index(drop=True)
# 把关联键加入df_normal
df_normal['value'] = expanded_values
# 执行左连接
merged_df = df_channel.merge(df_normal, on='value', how='left')

注意事项

  • 若progression.steps存在空数组的情况,要在计算长度时做空值判断,避免repeat操作报错
  • 确保value字段是df_channel中唯一标识每条数据的键,否则连接后会出现冗余重复行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 21:25:26