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

如何将迭代构建的嵌套字典转换为多级列DataFrame?

嵌套字典转多级列DataFrame

直接用pandas的json_normalize方法就能快速实现需求,步骤如下:

示例代码

先构造和你结构一致的嵌套字典(用示例数据替代省略号):

import pandas as pd

# 匹配你结构的示例嵌套字典
d = {
    'usa': {
        'day': {'c1': 1, 'c2': 2, 'c3': 3},
        'night': {'c1': 4, 'c2': 5, 'c3': 6}
    },
    'jap': {
        'day': {'c1': 7, 'c2': 8, 'c3': 9},
        'night': {'c1': 10, 'c2': 11, 'c3': 12}
    },
    'chi': {
        'day': {'c1': 13, 'c2': 14, 'c3': 15},
        'night': {'c1': 16, 'c2': 17, 'c3': 18}
    }
}

执行转换操作:

# 解析嵌套字典,将层级键转为带分隔符的列名
df = pd.json_normalize(d)
# 将列名拆分为多级索引(第一级为day/night,第二级为c1/c2/c3)
df.columns = pd.MultiIndex.from_tuples([col.split('.') for col in df.columns])

# 查看最终结果
print(df)

输出结果

执行后会得到符合要求的多级列DataFrame:

day        night     
     c1  c2  c3    c1  c2  c3
usa   1   2   3     4   5   6
jap   7   8   9    10  11  12
chi  13  14  15    16  17  18

替代方法:手动构造多级列结构

如果不想用json_normalize,也可以调整字典结构让pandas自动识别多级列:

# 重构数据结构,让每个二级键对应所有一级键的数值
structured_data = {
    ('day', 'c1'): {k: v['day']['c1'] for k, v in d.items()},
    ('day', 'c2'): {k: v['day']['c2'] for k, v in d.items()},
    ('day', 'c3'): {k: v['day']['c3'] for k, v in d.items()},
    ('night', 'c1'): {k: v['night']['c1'] for k, v in d.items()},
    ('night', 'c2'): {k: v['night']['c2'] for k, v in d.items()},
    ('night', 'c3'): {k: v['night']['c3'] for k, v in d.items()}
}

df = pd.DataFrame(structured_data)

该方法也能生成完全一致的多级列DataFrame。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 19:43:11