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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 10:35:20