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

如何将多级JSON/字典转换为Python DataFrame?求助解决报错

解决方案

问题分析

你的原始字典中,每个键(L1/L2/L3)对应的值是包含单个字典的列表,这是代码报错的核心原因——直接传入列表会导致格式不匹配,同时原代码的字典推导式存在语法错误。

正确代码实现

方法一:预处理字典后构造DataFrame

先提取每个列表中的字典元素,再用from_dict指定orient='index'生成目标格式:

import pandas as pd

d = { 
    'L1': [{'att_1': 10, 'att_2': 'whatever', 'att_4': 214, 'att_5': 'YES'}],
    'L2': [{'att_1': 11, 'att_2': 'whatever News', 'att_4': 230, 'att_5': 'another'}],
    'L3': [{'att_1': 12, 'att_2': 'whatever says', 'att_4': 213, 'att_5': 'YES'}]
}

# 提取每个列表中的字典,生成新的键值对字典
cleaned_data = {key: value[0] for key, value in d.items()}
# 从字典生成DataFrame,orient='index'表示用键作为行索引
df = pd.DataFrame.from_dict(cleaned_data, orient='index')

print(df)

方法二:通过拼接子DataFrame实现

遍历每个键值对,将单个列表转成子DataFrame并设置行索引,最后拼接:

import pandas as pd

d = { 
    'L1': [{'att_1': 10, 'att_2': 'whatever', 'att_4': 214, 'att_5': 'YES'}],
    'L2': [{'att_1': 11, 'att_2': 'whatever News', 'att_4': 230, 'att_5': 'another'}],
    'L3': [{'att_1': 12, 'att_2': 'whatever says', 'att_4': 213, 'att_5': 'YES'}]
}

df_list = []
for key, value in d.items():
    # 将单个列表转成DataFrame,设置行索引为当前键
    temp_df = pd.DataFrame(value, index=[key])
    df_list.append(temp_df)

# 拼接所有子DataFrame
df = pd.concat(df_list)

print(df)

原代码错误说明

  1. 字典推导式语法错误:{k:(v,orient='index')} 是无效写法,from_dict需要的是键对应字典的结构,而非元组。
  2. 未处理列表嵌套:每个v是包含字典的列表,必须先取出v[0]获取实际的字典数据,才能用于构造DataFrame。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 21:25:24