如何解析深度嵌套JSON数据并生成Pandas DataFrame?
解决深度嵌套JSON转Pandas DataFrame的问题
步骤1:加载JSON数据
先将JSON文件加载到Python环境中:
import json import pandas as pd # 读取目标JSON文件 with open('your_data.json', 'r', encoding='utf-8') as f: raw_data = json.load(f) # 提取核心的result数组(这是我们需要处理的数据集) target_data = raw_data['result']
步骤2:处理嵌套字段生成DataFrame
根据嵌套结构的不同,分两种场景处理:
场景1:out_msgs是数组,需要展开为多行
如果out_msgs包含多条消息,要让每条消息与对应的utime、in_msg数据关联,用json_normalize指定展开路径和保留的元数据:
df = pd.json_normalize( target_data, record_path='out_msgs', # 指定要展开的数组字段 meta=[ 'utime', ['in_msg', 'content'], # 提取in_msg下的具体子字段 ['in_msg', 'sender'] # 可根据实际嵌套层级继续添加 ], errors='ignore' ) # 可选:重命名列名让结构更清晰 df.rename(columns={ 'in_msg.content': 'in_msg_content', 'in_msg.sender': 'in_msg_sender' }, inplace=True)
场景2:out_msgs无需展开,保留为列表
如果只需要扁平化in_msg字段,out_msgs保持原数组格式:
# 直接扁平化in_msg,保留utime和out_msgs字段 df = pd.json_normalize(target_data)[['utime', 'in_msg.content', 'in_msg.sender', 'out_msgs']] # 重命名列名 df.columns = ['utime', 'in_msg_content', 'in_msg_sender', 'out_msgs']
验证结果
运行代码后,执行print(df.head())即可查看生成的DataFrame结构是否符合需求。如果存在更深层级的嵌套,只需在meta参数中补充对应路径(如['in_msg', 'details', 'id'])即可。
内容的提问来源于stack exchange,提问作者jtoyhh
相关产品推荐
相关产品推荐

