嵌套字典(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
相关产品推荐
相关产品推荐

