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

嵌套字典(dict of dicts)转DataFrame:首键为表头次键为列的实现问询

嵌套字典转Pandas DataFrame的实用方案

嘿,我来帮你搞定这个嵌套字典转DataFrame的问题!先明确下你的需求对应的典型场景——假设你的嵌套字典是这种结构:第一层键是你想要的表头/列名,第二层键是行标签,对应的值就是单元格里的内容,比如:

# 举个直观的例子
my_nested_dict = {
    "销售额": {"1月": 150, "2月": 200, "3月": 180},
    "支出": {"1月": 80, "2月": 90, "3月": 75},
    "利润": {"1月": 70, "2月": 110, "3月": 105}
}

下面给你几种简单靠谱的实现方式,顺便聊聊你之前可能踩的坑:

方法1:直接用pd.DataFrame()构造(最省心)

Pandas对嵌套字典的识别很智能,直接把字典丢进去就能得到你想要的结果:

import pandas as pd

df = pd.DataFrame(my_nested_dict)
print(df)

输出结果完美匹配你的需求:

销售额  支出   利润
1月  150  80   70
2月  200  90  110
3月  180  75  105

这里第一层键(销售额/支出/利润)就是表头(列名),第二层键(1月/2月/3月)是行索引,对应的值自动填充到单元格里。

方法2:用pd.DataFrame.from_dict()灵活调整

如果你的字典结构反过来(比如第一层是行标签,第二层是列名),可以用orient参数来调整:

  • 默认orient='columns':和直接构造效果一致,第一层为列,第二层为行
  • 设为orient='index':第一层为行索引,第二层为列,再用.T转置就能切换成你要的表头格式

举个例子:

# 第一层是行标签的字典
row_first_dict = {
    "1月": {"销售额":150, "支出":80},
    "2月": {"销售额":200, "支出":90}
}
# 转成表头为列名的DataFrame
df = pd.DataFrame.from_dict(row_first_dict, orient='index').T
print(df)

输出:

1月  2月
销售额   150  200
支出     80   90

为什么你之前可能失败?

你提到“无法替换对应的值”,大概率是这两个原因:

  • 字典结构不统一:比如部分第二层字典缺少某些键,Pandas会自动填充NaN,你可能误以为值没对应上。这种情况可以用df.fillna(0)之类的方法补全,或者提前统一所有第二层字典的键。
  • 参数用错了:比如用from_dict时选错了orient参数,导致行和列颠倒,看起来值完全不对。

更优的格式化方式(适配不规则字典)

如果你的嵌套字典结构不规整(比如有的第二层字典缺键),推荐用pd.json_normalize()来处理,它能自动扁平化结构并补全缺失值:

# 存在缺失键的不规则嵌套字典
incomplete_dict = {
    "销售额": {"1月":150, "3月":180},
    "支出": {"1月":80, "2月":90}
}
df = pd.json_normalize(incomplete_dict).T.reset_index()
df.columns = ["类别", "数值"]
print(df)

输出:

类别    数值
0   销售额  150.0
1   销售额  180.0
2    支出   80.0
3    支出   90.0

这种方式适合处理结构灵活的嵌套数据,格式化起来更省心。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:24:37