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

如何在pandas中固定09:30-16:00区间填充时间序列缺失值

Pandas固定交易时段时间序列缺失值补全方案

你的原有代码的问题在于groupby.resample默认以每个分组内的最小、最大时间戳作为采样的起止边界,因此当日最早数据晚于09:30时,不会生成开盘到最早数据之间的时间戳。

以下是两种高效的实现方案,都可以实现无论原始数据是否包含开盘收盘时间戳,都强制补全每日09:30-16:00区间的所有时间点:


方案1:预生成完整时间索引对齐(性能最优)

该方案直接提前生成所有交易日的完整交易时段时间序列,再和原始数据对齐,避免groupby内部的边界计算,数据量越大性能优势越明显。

import pandas as pd

# 可按需调整的固定参数
TRADING_START = "09:30:00"
TRADING_END = "16:00:00"
update_interval = "5T" # 和你原有采样间隔参数保持一致

# 1. 提取原始数据中所有的唯一交易日
trade_dates = df_process['Exchange DateTime'].dt.date.unique()

# 2. 生成所有交易日的完整时间戳列表
full_timestamps = []
for date in trade_dates:
    day_start = pd.Timestamp.combine(date, pd.Timestamp(TRADING_START).time())
    day_end = pd.Timestamp.combine(date, pd.Timestamp(TRADING_END).time())
    day_range = pd.date_range(start=day_start, end=day_end, freq=update_interval)
    full_timestamps.extend(day_range)
full_time_index = pd.Index(full_timestamps, name='Exchange DateTime')

# 3. 原始数据和完整时间索引对齐
df_process = df_process.set_index('Exchange DateTime')
df_process_out = df_process.reindex(full_time_index)

# 4. 按天分组向前填充缺失值
df_process_out = df_process_out.groupby(df_process_out.index.date, group_keys=False).ffill()

方案2:自定义groupby重采样逻辑(贴合原有写法)

如果更习惯原有groupby.resample的写法,可以自定义分组处理函数,手动指定每个交易日的采样起止边界:

TRADING_START = "09:30:00"
TRADING_END = "16:00:00"
update_interval = "5T"

df_process['FillDate'] = df_process['Exchange DateTime'].dt.date
df_process = df_process.set_index('Exchange DateTime')

def resample_trade_day(group):
    trade_date = group.name
    day_start = pd.Timestamp.combine(trade_date, pd.Timestamp(TRADING_START).time())
    day_end = pd.Timestamp.combine(trade_date, pd.Timestamp(TRADING_END).time())
    # 指定重采样起始点为当日开盘时间
    resampled = group.resample(rule=update_interval, origin=day_start).ffill()
    # 仅保留收盘时间之前的记录
    return resampled[resampled.index <= day_end]

df_process_out = df_process.groupby('FillDate', group_keys=False).apply(resample_trade_day).drop('FillDate', axis=1)

两种方案均兼容你原有的向前填充逻辑,也不会生成交易日之外的冗余时间戳。

内容的提问来源于stack exchange,提问作者Chris Bauer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 02:06:02