如何在Pandas中用前后天同时段均值插值缺失的小时级时间序列数据
实现方案
首先保证你的DataFrame满足两个前置条件:
- datetime列已转换为pandas时间格式,且按时间升序排列
- 时间序列是连续的小时粒度(如果存在整行数据缺失的情况,先调用
asfreq('H')补全时间行,保证每小时都有对应记录)
核心代码
import pandas as pd # 1. 处理时间索引(如果已经完成可以跳过) df['datetime'] = pd.to_datetime(df['datetime']) df = df.set_index('datetime').sort_index() # 可选:补全缺失的时间行,保证小时粒度连续 df = df.asfreq('H') # 2. 整列直接填充缺失值,无需切分数据 df['value'] = df['value'].fillna((df['value'].shift(24) + df['value'].shift(-24)) / 2)
逻辑说明
shift(24):将value列整体后移24行,每个时间点对应的值为前一天同时段的数值shift(-24):将value列整体前移24行,每个时间点对应的值为后一天同时段的数值- 二者取均值后直接通过
fillna填充到原列的NaN位置,完全在原DataFrame上操作,无需拆分替换,和你示例的计算逻辑完全匹配。
可选边界处理
如果你的数据首尾时段存在缺失,没有对应的前一天/后一天数据,上述计算后仍会保留NaN,可以额外加一步填充逻辑:
# 用线性插值补全首尾剩余缺失值,可根据需求替换为其他填充策略 df['value'] = df['value'].fillna(df['value'].interpolate())
内容的提问来源于stack exchange,提问作者Matt Friend
相关产品推荐
相关产品推荐

