如何将多级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)
原代码错误说明
- 字典推导式语法错误:
{k:(v,orient='index')}是无效写法,from_dict需要的是键对应字典的结构,而非元组。 - 未处理列表嵌套:每个
v是包含字典的列表,必须先取出v[0]获取实际的字典数据,才能用于构造DataFrame。
内容的提问来源于stack exchange,提问作者thangaraj1980
相关产品推荐
相关产品推荐

