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

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 22:52:55