除了我们在上一篇《Python中的缺失数据处理方法》遇到的float,int或者分类数据之外,还有一种常见的数据类型——时间序列数据。那么当时间序列对应的数据存在缺失的时候,我们需要使用什么方法进行处理和插补呢?
这篇例文所使用的数据:点击下载
|
|
对于处理时间序列缺失数据,我们有两大类处理方式:第一个是.fillna()
,第二个是.interpolate()
。我们在这里将会首先使用.fillna()
,然后再使用.interpolate()
来处理df中的缺失数据,并且我们会用可视化的方式,来评估和选取表现最好的方法。
.fillna()
.fillna()
有两种插补数据的方式,分别是向前插补和向后插补。使用何种插补方式需要修改.fillna()中的method参数:
- ‘ffill’ or ‘pad’
- ‘bfill’ or ‘backwardfill’
其中,向前插补ffill顾名思义就是使用缺失数据前面一个不是缺失数据的值来进行插补,向后插补bfill与ffill相反,使用缺失数据后一个不是缺失数据的值来进行插补。
我们看一下ffill和bfill的插补效果及差别:
|
|
.interpolate()
.interpolate()
有三种插补方式,分别是:线性‘linear’,二元’quadratic’,和最近’nearest’。下面将展示这三种方式的插补效果及差别:
|
|
可视化时间序列数据
我们可以通过对原数据及插补后的数据进行可视化来评估哪种插补方式更为合理:
首先是ffill和bfill:
|
|
|
|
然后我们来看下线性‘linear’,二元’quadratic’,和最近’nearest’:
|
|
经过我们对比5种处理和插补方式,发现线性linear插补表现最佳。二元quadratic的插补数据一些超出了范围。fill方式和nearest方式处理效果也欠佳。