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

如何将两层嵌套字典转换为指定格式的Pandas DataFrame

如何将两层嵌套字典转换为指定格式的Pandas DataFrame

嘿,我来帮你搞定这个问题!你想要把两层嵌套字典转成目标格式的DataFrame其实不用折腾复杂的字典推导式,Pandas本身就有很简洁的解决方案,而且完全支持任意数量的列,正好符合你的需求。

先看看你的数据结构:外层字典的键是列名(A-F),内层字典的键是日期(mon、tue等),对应的值是每日数据。针对这种结构,我们可以直接利用Pandas的内置能力来生成表格:

步骤1:直接用嵌套字典生成基础DataFrame

Pandas会自动把内层字典的键作为行索引,外层字典的键作为列名,这刚好和你想要的行是日期、列是A-F的结构匹配。

示例代码:

import pandas as pd

# 你的嵌套字典数据
data_collated = {
    "A": {"mon": 11791, "tue": 24335, "wed": 12615, "thurs": 13743, "fri": 9082, "sat": 5667, "sun": 4385},
    "B": {"mon": 22099, "tue": 24521, "wed": 24163, "thurs": 27049, "fri": 27580, "sat": 23062, "sun": 18576},
    "C": {"mon": 794, "tue": 320, "wed": 398, "thurs": 1272, "fri": 311, "sat": 306, "sun": 1251},
    "D": {"mon": 52328, "tue": 50260, "wed": 42357, "thurs": 40439, "fri": 38495, "sat": 40738, "sun": 39602},
    "E": {"mon": 337496, "tue": 264658, "wed": 413464, "thurs": 325054, "fri": 343452, "sat": 282158, "sun": 292401},
    "F": {"mon": 3137, "tue": 3621, "wed": 3297, "thurs": 4682, "fri": 7845, "sat": 13682, "sun": 12084}
}

# 直接生成DataFrame
df = pd.DataFrame(data_collated)

这时候生成的DataFrame已经有了正确的行(日期)和列(A-F),只是日期还在索引位置,不是单独的"Day"列。

步骤2:将索引转为"Day"列

用reset_index()把索引转成普通列,再重命名列名就可以了:

# 将索引转为Day列,并调整列名
df = df.reset_index().rename(columns={"index": "Day"})

# 如果需要固定列的顺序(确保Day在最前面),可以手动指定列顺序(可选)
df = df[["Day", "A", "B", "C", "D", "E", "F"]]

现在你的DataFrame就完全符合目标格式了,行是7天的数据,列包含Day和A-F,而且不管你后续加多少个列(比如G、H),这个方法都能自动适配。

为什么你之前的尝试出问题了?

你写的字典推导式多层循环逻辑有点混乱,导致生成的结构不符合Pandas的要求,最后只得到了重复的两行数据。其实完全不用自己手动构造元组,Pandas已经帮我们处理了这种嵌套字典的转换逻辑~

备注:内容来源于stack exchange,提问作者ch4rl1e97

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 11:54:51