Pandas补全缺失时间间隔数据:15分钟时段缺失值填充问题
解决方案
1. 修复索引类型问题
你遇到的TypeError是因为当前DataFrame的索引是默认的RangeIndex,而非resample要求的DatetimeIndex——哪怕日期列是datetime格式,只要没把它设为索引或索引类型不对,就会触发该错误。
执行以下代码修正:
- 如果
Date是普通列:
import pandas as pd # 转换为datetime格式并设置为索引 df['Date'] = pd.to_datetime(df['Date']) df = df.set_index('Date')
- 如果
Date已经是索引但类型异常:
df.index = pd.to_datetime(df.index)
2. 补全19:00-21:00的缺失值
要使用当日最近的可用数据填充缺失,先生成完整的15分钟时间序列,再对齐原数据并填充:
# 生成当日完整的15分钟间隔时间轴 start_of_day = df.index.min().floor('D') end_of_day = df.index.max().ceil('D') full_time_axis = pd.date_range(start=start_of_day, end=end_of_day, freq='15T') # 对齐数据并填充:先向前取最近值,再向后兜底(确保当日无前置数据时也能补全) df_filled = df.reindex(full_time_axis).ffill().bfill()
如果只需要针对性补全19:00-21:00的缺失,可使用掩码筛选后填充:
# 筛选19:00至21:00的时段 missing_mask = (df.index.hour >= 19) & (df.index.hour < 21) # 用当日前后最近的可用值填充该时段 df.loc[missing_mask] = df.loc[missing_mask].ffill().bfill()
注意事项
ffill():填充时优先取缺失值之前最近的有效数据bfill():当缺失值位于当日数据开头时,用之后的有效数据兜底- 若要严格限制仅使用当日内的数据填充,可按日期分组后操作:
df_filled = df.groupby(df.index.date).apply( lambda group: group.reindex( pd.date_range(start=group.index.min().floor('H'), end=group.index.max().ceil('H'), freq='15T') ).ffill().bfill() ) # 重置冗余的日期索引 df_filled = df_filled.reset_index(level=0, drop=True)
内容的提问来源于stack exchange,提问作者Verconator
相关产品推荐
相关产品推荐

