为何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
相关产品推荐
相关产品推荐

