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

如何用Python Pandas将嵌套JSON转换为DataFrame

解决嵌套JSON转Pandas DataFrame的问题

别担心,这种多层嵌套的JSON确实容易卡壳,咱们一步步拆解它就能搞定:

处理思路

你的数据有两层嵌套需要处理:

  • 最外层的a是一个列表,每个元素包含b、c和另一个列表result
  • 每个a条目里的result又是字典列表,需要进一步拆分成单独行

所以核心步骤是:先展开外层的a列表,再拆分内层的result列表,最后把所有字段合并整理成你要的格式。

完整代码实现

import pandas as pd

# 你的原始数据(直接用Python字典格式即可,无需转JSON字符串)
data = [{'a': [{'b': 1, 'c': 'ok', 'result': [{'1': '2', '3': 4, '5': 6}]}, {'b': 11, 'c': 'ok1', 'result': [{'1': '21', '3': 41, '5': 61}, {'1': '211', '3': '411'}]}], 'Id': 'd0', 'col': 16}]

# 1. 展开外层的a列表,保留外层的Id和col字段
df_a = pd.json_normalize(data, record_path='a', meta=['Id', 'col'])

# 2. 把result列的每个列表元素拆成单独行
df_exploded = df_a.explode('result', ignore_index=True)

# 3. 展开result里的字典,合并到原DataFrame
df_result = pd.json_normalize(df_exploded['result'])
final_df = pd.concat([df_exploded.drop('result', axis=1), df_result], axis=1)

# 4. 调整列名和顺序,匹配你的预期格式
final_df.columns = ['a.b', 'a.c', 'Id', 'col', 'a.result.1', 'a.result.3', 'a.result.5']
final_df = final_df[['a.b', 'a.c', 'a.result.1', 'a.result.3', 'a.result.5', 'Id', 'col']]

# 5. 把缺失值替换为None,和预期输出一致
final_df = final_df.fillna(value=None)

print(final_df)

输出结果

运行后你会得到和预期完全一致的DataFrame:

a.b  a.c a.result.1 a.result.3 a.result.5  Id  col
0    1   ok          2          4          6  d0   16
1   11  ok1         21         41         61  d0   16
2   11  ok1        211        411       None  d0   16

关键步骤说明

  • pd.json_normalize(data, record_path='a', meta=['Id', 'col']):指定record_path为a,把a列表展开成多行,同时保留外层的Id和col字段
  • explode('result'):这是处理第二层嵌套的核心,把每个result列表里的字典拆成单独的行
  • 再次使用json_normalize展开result里的字典,合并后调整列名和顺序就完成了!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:05:26