如何将包含嵌套数组字段的JSON转换为Pandas DataFrame
问题解答
结论
该需求完全可实现,核心思路是将intervalData数组的每一行作为数据条目,用intervalMetaData作为对应的列名生成子DataFrame,再和JSON外层的公共属性字段合并即可。
具体操作步骤
前置依赖
需要提前安装pandas库,安装命令:
pip install pandas
操作代码示例
单条JSON数据处理
import pandas as pd import json # 读取JSON文件,这里假设你的JSON数据保存在data.json中 with open("data.json", "r", encoding="utf-8") as f: json_data = json.load(f) # 第一步:处理嵌套的interval数据,生成子DataFrame # 先处理重复列名的问题,避免后续操作冲突 col_names = [] count_dict = {} for col in json_data["intervalMetaData"]: if col in count_dict: count_dict[col] += 1 col_names.append(f"{col}_{count_dict[col]}") else: count_dict[col] = 0 col_names.append(col) interval_df = pd.DataFrame(json_data["intervalData"], columns=col_names) # 第二步:合并外层公共字段到子DataFrame # 提取外层不需要嵌套展开的字段 outer_fields = {k:v for k,v in json_data.items() if k not in ["intervalMetaData", "intervalData"]} for k,v in outer_fields.items(): interval_df[k] = v # 最终的结果就是interval_df,可以直接输出查看 print(interval_df.head())
多条JSON数组批量处理
如果你的JSON文件是多条上述结构的对象组成的数组,可以用如下方式批量处理:
import pandas as pd import json with open("data_list.json", "r", encoding="utf-8") as f: json_list = json.load(f) result_list = [] for json_data in json_list: # 列名去重 col_names = [] count_dict = {} for col in json_data["intervalMetaData"]: if col in count_dict: count_dict[col] += 1 col_names.append(f"{col}_{count_dict[col]}") else: count_dict[col] = 0 col_names.append(col) interval_df = pd.DataFrame(json_data["intervalData"], columns=col_names) # 合并外层字段 outer_fields = {k:v for k,v in json_data.items() if k not in ["intervalMetaData", "intervalData"]} for k,v in outer_fields.items(): interval_df[k] = v result_list.append(interval_df) # 合并所有结果为一个DataFrame final_df = pd.concat(result_list, ignore_index=True)
注意事项
- 原始JSON结构中
intervalMetaData存在重复的列名(比如max、maxGen都出现了2次),示例代码中通过添加序号后缀的方式处理了重复列名问题,你可以根据实际业务需求调整重命名规则 - 如果你不需要保留所有外层字段,可以自行修改
outer_fields的筛选规则,只保留你需要的字段即可
内容的提问来源于stack exchange,提问作者shivanshu
相关产品推荐
相关产品推荐

