7.9 处理时间序列中的缺失值
问题描述
处理时间序列数据中的缺失值。
解决方案
除了之前讨论过的针对缺失数据的处理策略,针对时间序列数据,还可以使用插值法来填充由缺失值造成的数据缺口:


或者,可以用前面的值来替换缺失值(也就是向前填充):

还可以用后面的值来替换缺失值(也就是向后填充):

讨论
插值法是一种填充由缺失值造成的数据缺口的技术,实际上就是根据缺口附近的已知数据来画一条直线或者曲线,然后利用这条直线或曲线预测合理的值。当时间间隔确定,数据不会产生剧烈波动且缺失值缺口比较小的时候,插值法尤其有用。例如,上述解决方案中,缺失值缺口附近的值是2.0和5.0。从2.0到5.0画一条线,根据这条线预测出两个缺失值比较合理的值是3.0和4.0。
如果我们认为两个已知点之间的线是非线性的,可以使用interpolate的method参数来指定插值的方式:

最后,缺失值的缺口可能非常大,我们不想对整个缺口进行插值。在这种情况下,可以使用limit来限制插值的数量,并用limit_direction来设置是从最后一个已知值进行向前插值,还是进行反向的操作。

向后填充和向前填充是简单的插值法,它们都是画一条经过已知值的线,并利用这条线来填充缺失值。向后填充和向前填充还有一个小优点,即不需要知道缺失值两侧的值。



本书评论