如何判断是否对时序数据的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
相关产品推荐
相关产品推荐

