背景:Python 做数据分析,DataFrame数据结构
由于需要根据历史的时间序列预测未来一段时间的序列值,在获取时间序列时经常会遇到部分值缺失,或者数值不理想的情况。此时为了保证历史序列的正确提取,就要把异常值去掉,然后通过插值进行修补。
以下是Pandas中的几种插值方式,使用方便:
1、线性插值。
顾名思义,可能是最直接的插值方式之一,虽然简单可能效果也不太好。
特点:只能在已知样本中间插值,像我的数据里,起始数据没有的情况是不行的。
代码很简单,Pandas的内置函数,把要插值的地方置为NaN,然后直接调用interpolate()函数。
delIndex = df[df['cloud'] != 0].index # 筛选要插值的位置
df.iloc[delIndex, 2] = np.nan # 置为NaN
df = df.interpolate() # 插值
插值前:
线性插值后:
2、多项式插值也是一样,指定参数method和阶数order:
delIndex = df[df['cloud'] != 0].index # 筛选要插值的位置
df.iloc[delIndex, 2] = np.nan # 置为NaN
df = df.interpolate(method='polynomial', order=2) # 多项式插值
多项式插值后:
这段数据看起来多项式插值和线性插值区别不大,插值结果只有小数级的差异。
3、样条插值是一种基于样条曲线的插值方法。它通过拟合一条具有光滑特性的曲线来估算未知数据点的值。在Pandas中,可以使用interpolate()
函数的method
参数来选择样条插值的方法。
delIndex = df[df['cloud'] != 0].index # 筛选要插值的位置
df.iloc[delIndex, 2] = np.nan # 置为NaN
df = df.interpolate(method='spline', order=2) # 样条插值
样条插值后:
单看数值差异很小,猜测对我这个任务,使用哪种插值方法影响不大。
等我插值完所有的缺失数据后,计算一次总体误差应该能比较一下在这个任务上哪种插值方法更好,当然,也可能结果差距不大。