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

基于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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:33:09