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

为何Pandas infer_freq将小时数据识别为Daily?附日均值转换需求

解决Pandas推断小时级时序频率错误及计算日均值的方法

问题原因

pd.infer_freq通过检测索引的时间间隔规律推断频率,若你的小时级数据存在缺失的小时点,比如部分时段数据丢失,Pandas可能误将“每天同一小时有数据”的规律判定为Daily频率(返回'D')。你用asfreq基于这个错误频率重采样,就会只保留每天对应时间点的数据,最终结果变成每天一行。

正确实现日均值的方法

不需要依赖infer_freq,直接用resample按天聚合计算均值,这是时序数据聚合的标准方案,无论数据是否有缺失都能正确计算每日平均值:

df = pd.read_csv('/kaggle/input/hourly-energy-consumption/DOM_hourly.csv')
# 转换并设置时间索引
df['Datetime'] = pd.to_datetime(df['Datetime'], format='%Y-%m-%d %H:%M:%S')
df.set_index('Datetime', inplace=True)
# 去重索引
df = df[~df.index.duplicated(keep='first')]
# 计算日均值
daily_mean_df = df.resample('D').mean()
# 查看结果
print(daily_mean_df.head())
print(daily_mean_df.shape)

补充说明

  • resample('D')指定按日历日聚合,mean()会自动将当天所有小时的数据取平均,即使当天部分小时数据缺失,也会用现有有效数据计算(若需排除缺失过多的日期,可后续添加过滤逻辑)。
  • 若需确认原始数据频率,df.index.inferred_freq在数据缺失时可能不准确,此时更可靠的方式是手动指定已知频率(比如小时级数据用'H'):
    # 手动设置小时频率(适用于完整的小时序列)
    df = df.asfreq('H')
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 02:12:55