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

Python pandas如何使用json_normalize解包多层嵌套JSON数据

pandas 混合嵌套结构JSON扁平化实现方案

问题根因

解析失败的核心原因是输入数据的嵌套结构不统一:Source[0].Movies 字段在Rocco的记录中为单个字典,在Anja、Kasia的记录中为字典列表。pd.json_normalize 要求指定路径下的节点结构保持一致,无法自动识别这种混合格式完成展开,仅调整record_path和meta参数无法解决问题,必须先做结构统一的预处理。

完整实现代码

  1. 导入依赖
import pandas as pd
from pandas import json_normalize
  1. 统一嵌套结构
    遍历所有记录,将所有Movies字段的值统一转为列表格式,消除单字典/列表的格式差异:
# 此处data为原始测试数据
for record in data:
    for source_item in record['Source']:
        if not isinstance(source_item['Movies'], list):
            # 把非列表类型的Movies值包装为单元素列表
            source_item['Movies'] = [source_item['Movies']]
  1. 扁平化处理
    调用json_normalize,将最内层的电影列表指定为记录路径,同时把需要保留的顶层用户属性加入元数据参数:
df_result = json_normalize(
    data,
    record_path=['Source', 'Movies'],
    meta=['Name', 'Year', 'Location']
)

# 调整列顺序、重命名列,匹配期望输出格式
df_result = df_result[['Year', 'Name', 'Location', 'MovieNumber', 'Money', 'Percent']]
df_result.columns = [
    'Year',
    'Name',
    'Location',
    'Movies.MovieNumber',
    'Movies.Money',
    'Movies.Percent'
]

输出效果

最终生成的DataFrame共6行有效数据:Rocco对应1条记录,Anja对应2条记录,Kasia对应3条记录,包含全部要求的6个字段,无解析异常。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 22:46:03