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

如何判断是否对时序数据的NaN值插值?可口可乐股价数据处理疑问

可口可乐股价数据集缺失值处理疑问

我使用了一份可口可乐股价的每日频率公开数据集,原始记录有15311条,将日期设为索引按每日频率重采样后,出现了6900+个NaN值。重采样代码如下:

import pandas as pd

data = pd.read_csv(filepath)
data_preprocessed = data.copy()
data_preprocessed['Date'] = pd.to_datetime(data['Date'].str.split(' ').str[0])
data_preprocessed.set_index('Date', inplace=True)
data_monthly = data_preprocessed.resample('D').last()
print(data_monthly.isnull().sum()) # 统计缺失天数

纠结该用ffill()、bfill()、interpolate()还是直接drop()处理这些缺失值?


缺失值处理方案分析
  • 直接drop():不推荐
    6900+的缺失值占比不小,直接删除会严重破坏时间序列的连续性,后续趋势分析、建模都会受影响。而且股价数据的日期缺失大概率是周末、节假日这类非交易日,这些日期本来就没有交易数据,删除反而会打乱时间轴的完整性。

  • ffill()(前向填充):优先考虑
    非交易日没有交易,股价不会变动,用前一个交易日的收盘价填充是行业常规操作,完全符合实际逻辑,操作也简单:

    data_monthly = data_monthly.ffill()
    
  • bfill()(后向填充):谨慎使用
    后向填充会用下一个交易日的数据填补前面的缺失,相当于“提前预知未来股价”,会引入数据泄露,不管是可视化还是建模都会失真,除非你明确缺失的是交易日数据且有特殊业务逻辑,否则别用。

  • interpolate()(插值填充):针对性使用
    如果缺失值里包含交易日(比如数据采集遗漏),插值(比如时间加权插值)能更合理地贴合股价波动趋势,比简单前后填充更准确:

    # 时间加权插值,适配时间序列特性
    data_monthly = data_monthly.interpolate(method='time')
    

    但如果缺失的都是非交易日,插值反而会生成不合理的“伪股价”,违背实际情况。

总结建议

先排查缺失值对应的日期:如果大部分是周末、节假日,直接用ffill();如果存在交易日缺失,针对这部分用interpolate(),非交易日仍用前向填充;绝对不要直接drop()。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 20:43:17