如何使用pd.concat处理嵌套字典生成多层列DataFrame?
解决四层嵌套字典生成多层列DataFrame的问题
错误原因分析
- 第一个语法错误:
pd.concat参数中直接写key3:{...}不符合Python字典语法,正确的字典构造格式应为{key3: ...} - ValueError:嵌套创建DataFrame时,内部层级的DataFrame因缺少明确索引触发报错,且这种嵌套构造方式会打乱列层级的逻辑结构
- TypeError:
pd.concat仅支持拼接Series或DataFrame对象,传入字典会触发类型不兼容错误
正确实现方法
不需要复杂的嵌套循环和pd.concat嵌套调用,以下两种简单方式可直接实现目标:
方法1:pd.json_normalize+多层列转换
import pandas as pd nested_dict = { 'level1': { 'level2': { 'level3': { 'level4': 'value' } } } } # 展开嵌套字典为单层列DataFrame df = pd.json_normalize(nested_dict) # 将点分隔的列名转换为多层索引 df.columns = pd.MultiIndex.from_tuples([tuple(col.split('.')) for col in df.columns]) print(df)
输出结果:
level1 level2 level3 level4 0 value
方法2:直接构造多层列结构
import pandas as pd nested_dict = { 'level1': { 'level2': { 'level3': { 'level4': 'value' } } } } # 提取所有层级键和最终值 keys = [] current_val = nested_dict while isinstance(current_val, dict): key = next(iter(current_val.keys())) keys.append(key) current_val = current_val[key] # 用多层索引构造目标DataFrame df = pd.DataFrame([[current_val]], columns=pd.MultiIndex.from_tuples([keys])) print(df)
输出结果与方法1完全一致。
基于pd.concat的修正思路(可选)
如果坚持使用pd.concat的思路,需从最内层向外逐层构建列层级:
import pandas as pd nested_dict = { 'level1': { 'level2': { 'level3': { 'level4': 'value' } } } } # 从最内层开始逐层拼接列层级 df_inner = pd.DataFrame({'level4': ['value']}) df_level3 = pd.concat({'level3': df_inner}, axis=1) df_level2 = pd.concat({'level2': df_level3}, axis=1) df_final = pd.concat({'level1': df_level2}, axis=1) print(df_final)
该方式可实现目标,但相比前两种方法冗余度更高。
内容的提问来源于stack exchange,提问作者desert_ranger
相关产品推荐
相关产品推荐

