如何用Python补全时间序列缺失的日期与数据
时间序列缺失值补全与插值的高效实现方案
对于小时级时间序列的缺失补全与插值,用Pandas是最标准高效的方案,无需手动遍历处理,步骤如下:
1. 数据加载与日期格式转换
先将原始数据加载为DataFrame,并把日期字符串快速转换为datetime类型,同时设为索引(这是时间序列处理的关键):
import pandas as pd # 示例数据(也可通过pd.read_csv读取文件) data = [ ["03/31 19:00", 68.0], ["03/31 20:00", 68.0], ["03/31 22:00", 70.0], ["03/31 23:00", 68.0], ["04/01 00:00", 69.0], ["04/01 02:00", 70.0] ] df = pd.DataFrame(data, columns=["datetime", "value"]) # 批量转换为datetime类型,比手动循环strptime高效 df["datetime"] = pd.to_datetime(df["datetime"], format="%m/%d %H:%M") # 设置datetime为索引,方便后续时间序列操作 df = df.set_index("datetime")
2. 补全缺失时间点
利用resample方法按小时生成完整的时间序列,缺失的时间点会自动填充NaN:
# 'H'表示按小时频率重采样,asfreq()生成连续时间轴 df_full = df.resample('H').asfreq()
此时df_full会包含所有连续的小时时间点,缺失的21:00、01:00对应的value列会被填充为NaN。
3. 缺失值插值
根据数据特性选择合适的插值方法,常用的两种:
- 时间加权插值:
method='time',考虑时间间隔权重,更贴合时间序列的变化规律,优先推荐 - 线性插值:默认方法,适合数值平稳变化的场景
代码示例:
# 时间加权插值 df_interpolated = df_full.interpolate(method='time') # 若用线性插值可替换为: # df_interpolated = df_full.interpolate(method='linear')
最终效果
处理后的df_interpolated会包含完整的小时时间序列,缺失的数值已被合理填充:
- 03/31 21:00的value会根据前后的68.0和70.0插值为69.0
- 04/01 01:00的value会根据前后的69.0和70.0插值为69.5
这种方案完全自动化,无需手动查找时间间隙,处理效率远高于手动遍历,是时间序列补全插值的工业标准实现。
内容的提问来源于stack exchange,提问作者Steve
相关产品推荐
相关产品推荐

