如何在Pandas中展平双层嵌套JSON文件并转换为结构化DataFrame
实现步骤
你遇到的报错是因为待处理列的每个元素是字典数组,pd.json_normalize无法直接解析嵌套数组,需要先拆分数组再逐层解析嵌套结构,具体操作如下:
依赖导入
首先导入需要的库:
import pandas as pd import json
处理流程
- 第一步:拆分嵌套数组为单行单字典
假设存储双层嵌套数据的列名为nested_col,替换为你实际的列名,使用explode将数组拆分为每行一个字典:df_exploded = df.explode('nested_col', ignore_index=True) - 第二步:展开第一层字典结构
对拆分后的字典列执行json_normalize,得到第一层字段(uid、sid、sc、epd),此时epd仍为JSON字符串格式:df_layer1 = pd.json_normalize(df_exploded['nested_col']) - 第三步:解析epd字段的内嵌JSON并展开
先把epd的字符串格式转为字典,再展开为独立列,和原有字段合并:# 解析epd的JSON字符串 epd_df = pd.json_normalize(df_layer1['epd'].apply(json.loads)) # 合并数据,删除原始epd列,空值填充为空字符串 final_df = pd.concat([df_layer1.drop(columns=['epd']), epd_df], axis=1).fillna('')
完整测试示例
你可以用以下代码验证效果,输入为你给出的示例数据:
import pandas as pd import json # 模拟原始数据 raw_df = pd.DataFrame({ "record_id": [1], "nested_col": [ [{'uid': 'abcd', 'sid': '1234', 'sc': 'false', 'epd': '{"value1":"66.72","value2":"66.72123"}'}, {'uid': 'abcd', 'sid': '1234', 'epd': '{"value1":"69.72","value2":"69.72123"}'}] ] }) # 执行处理 df_exploded = raw_df.explode('nested_col', ignore_index=True) df_layer1 = pd.json_normalize(df_exploded['nested_col']) epd_df = pd.json_normalize(df_layer1['epd'].apply(json.loads)) final_df = pd.concat([df_layer1.drop(columns=['epd']), epd_df], axis=1).fillna('') # 输出结果 print(final_df)
输出结果和你要求的结构完全一致:
| uid | sid | sc | value1 | value2 |
|---|---|---|---|---|
| abcd | 1234 | false | 66.72 | 66.72123 |
| abcd | 1234 | 69.72 | 69.72123 |
内容的提问来源于stack exchange,提问作者BKB
相关产品推荐
相关产品推荐

