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

如何在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)

输出结果和你要求的结构完全一致:

uidsidscvalue1value2
abcd1234false66.7266.72123
abcd123469.7269.72123

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 12:45:03