基于DataFrame绘制Matplotlib柱状图时的KeyError问题求助
解决GroupBy后柱状图
KeyError: 'Date'的问题 我一眼就看出问题所在啦——你用groupby('Date')聚合后,Date已经变成了DataFrame的索引,不再是普通的列了!这就是为什么你访问df1['Date']会抛出KeyError,而且转字典时结构和预期不符的原因。
两种快速解决方案:
方案1:聚合时保留Date为列(推荐)
修改你的聚合代码,加上as_index=False参数,让Date保持为DataFrame的列,这样原来的绘图代码完全不用改:
df1 = data[data['PumpState'] == 1.0].groupby('Date', as_index=False).agg({'Pressure': np.mean})
运行这段代码后,df1里就会有Date和Pressure两列,你原来的绘图代码就能正常读取df1['Date']了。
方案2:不修改聚合代码,绘图时使用索引获取日期
如果不想调整聚合逻辑,可以在绘图时直接调用DataFrame的索引来获取日期值,替换掉df1['Date']:
plt.bar(range(df1.shape[0]), df1['Pressure'], align='center', alpha=0.5) # 这里用df1.index获取日期索引,代替原来的df1['Date'] plt.xticks(range(df1.shape[0]), df1.index.values, rotation='vertical') plt.ylabel('Average Pressure') plt.xlabel('Date') plt.title('Average Pressure per Day') plt.show()
为什么会出现这种情况?
当你执行groupby('Date')时,Pandas默认会把分组的字段(也就是Date)设置为结果DataFrame的索引,用来标记每一行对应的分组。这时候df1的列只有Pressure,Date是存储在索引里的,所以你无法通过列名df1['Date']访问它。
你提到转字典时Pressure为键、Date为值,也是因为这个原因:当Date是索引时,df1.to_dict()会生成类似{'Pressure': {'2024-01-01': 10.2, '2024-01-02': 9.8}}的结构,看起来就像是Pressure是键,Date和对应值是嵌套内容。
内容的提问来源于stack exchange,提问作者papita_novana
相关产品推荐
相关产品推荐

