如何基于Pandas中前一行close值向前填充重采样后的NaN?
解决方案:用前一行收盘价填充所有缺失的OHLC字段
这个需求在股票K线数据补全场景里特别常见——你要的不是同列各自向前填充,而是让所有缺失的open/high/low/close字段,都用上一行的close值来补全。下面是几种高效的实现方式:
步骤1:先完成重采样操作
首先把你的重采样代码固化下来,方便后续处理:
# 执行3分钟重采样,聚合OHLC字段 resampled_df = feeddf.resample('3Min').agg({ 'open': 'first', 'high': 'max', 'low': 'min', 'close': 'last' })
方法一:统一用向前填充的收盘价补全所有列
这种方法先提取出向前填充后的收盘价序列,再用它覆盖所有列的NaN值:
# 先获取向前填充的收盘价序列(确保每一行都有前一行的收盘价) filled_close = resampled_df['close'].ffill() # 对每一列进行填充:如果当前值是NaN,就用对应行的filled_close值 resampled_df_filled = resampled_df.apply(lambda col: col.fillna(filled_close))
方法二:分步填充更直观
如果你喜欢逻辑更清晰的分步操作,可以先补全close列,再把其他列的NaN替换成同行情的close值:
# 第一步:先把close列向前填充(确保没有NaN) resampled_df['close'] = resampled_df['close'].ffill() # 第二步:把open/high/low的NaN值替换成对应行的close值 resampled_df[['open', 'high', 'low']] = resampled_df[['open', 'high', 'low']].fillna( resampled_df['close'], axis=0 )
预期结果
执行完上面任意一种方法后,你的DataFrame会变成这样:
open high low close date 2017-12-03 07:00:00 14.46 14.46 14.46 14.46 2017-12-03 07:03:00 14.46 14.46 14.46 14.46 2017-12-03 07:06:00 14.50 14.50 14.50 14.50 2017-12-03 07:09:00 14.50 14.50 14.50 14.50 2017-12-03 07:12:00 14.50 14.56 14.50 14.56
这样就完美实现了用前一行收盘价补全所有缺失字段的需求,符合股票数据补全的常规逻辑(无交易时段沿用最后收盘价)。
内容的提问来源于stack exchange,提问作者Abdul
相关产品推荐
相关产品推荐

