如何从三级嵌套字典提取值,生成分季节指定格式的Pandas DataFrame
处理三级嵌套字典生成分季节的Pandas DataFrame
问题背景
手里有个三级嵌套字典:
- 第一层键:1(冬季)、2(春季)、3(夏季)、4(秋季)
- 第二层键:2005到2018的年份
- 第三层键:0到23的小时数,对应的值是该季节、该年份下的小时均值
之前写的代码生成的结果不符合预期:
df = pd.DataFrame.from_dict({(i, j, k): pm_10_abs_season[i][j][k] for i in pm_10_abs_season.keys() for j in pm_10_abs_season[i].keys() for k in pm_10_abs_season[i][j]}, orient = 'index')
想要的是四个分季节的DataFrame,每个结构为:
- 行:2005到2018的年份
- 列:Hour 0、Hour 1……Hour 23
解决方法
直接按季节拆分处理,每个季节单独构造宽格式DataFrame就行:
import pandas as pd # 给季节键对应上中文名,方便后续识别 season_map = {1: '冬季', 2: '春季', 3: '夏季', 4: '秋季'} season_dfs = {} # 遍历每个季节 for season_key in pm_10_abs_season: # 取出当前季节下所有年份的小时数据 year_hour_data = pm_10_abs_season[season_key] # 直接把年份作为索引,小时数据作为列生成DataFrame df = pd.DataFrame.from_dict(year_hour_data, orient='index') # 把列名改成Hour 0、Hour 1的格式 df.columns = [f'Hour {hour}' for hour in df.columns] # 给索引命名为Year df.index.name = 'Year' # 把生成的DataFrame存进字典,用季节名当键 season_dfs[season_map[season_key]] = df # 调用示例:取出冬季的DataFrame winter_df = season_dfs['冬季'] print(winter_df)
为什么原来的代码不行?
你之前的代码把「季节、年份、小时」三个维度都拼成了索引元组,生成的是长格式的单列DataFrame(每一行对应一个(季节,年份,小时)的单一值),而我们需要的是每个季节单独的宽格式(年份为行,小时为列),所以得按季节拆分后分别构造。
内容的提问来源于stack exchange,提问作者Sujai Banerji
相关产品推荐
相关产品推荐

