如何将两层嵌套字典转换为指定格式的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
相关产品推荐
相关产品推荐

