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

DataFrame按小时分组datetime数据报错:AttributeError问题解决

解决DataFrame按小时分组的AttributeError问题

嘿,我知道你为啥踩坑了!你写的代码里有个容易忽略的细节——当你对casa_consumo['date']这个Series用groupby(lambda x: x.hour)时,lambda里的x根本不是date列的时间值,而是Series的整数索引!这就难怪会报'int' object has no attribute 'hour'的错了,哪怕你的date列确实是datetime64[ns]类型。

给你几个简单好用的正确解法:

方法1:直接提取小时作为分组键

利用pandas datetime类型的dt.hour属性,直接提取每个时间的小时数,以此作为分组依据:

# 对整个DataFrame按小时分组,计算各列均值
casa_consumo_h = casa_consumo.groupby(casa_consumo['date'].dt.hour).mean()

方法2:新增小时列后分组

如果需要更直观的分组标识,可以先给DataFrame新增一个hour列,再按这个列分组:

# 新增小时列
casa_consumo['hour'] = casa_consumo['date'].dt.hour
# 按小时列分组求均值
casa_consumo_h = casa_consumo.groupby('hour').mean()

方法3:用Grouper按时间区间分组

如果想要保留完整的时间区间索引(比如2017-08-01 00:00:00而不是单纯的0),可以用pd.Grouper指定小时频率:

import pandas as pd
# 按小时时间区间分组,索引为每个小时的起始时间
casa_consumo_h = casa_consumo.groupby(pd.Grouper(key='date', freq='H')).mean()

补充说明:

  • dt.hour是pandas专为datetime类型Series提供的属性,能快速提取小时数,返回的是整数类型的Series,完美适配分组需求。
  • 你之前的代码里对date列求均值其实意义不大,上面的方法默认会对所有数值列(比如Ac、f、I这些)计算均值,这应该才是你真正想要的结果~

内容的提问来源于stack exchange,提问作者may

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:27:23