时间序列应该是每天一个数值点,但是有时候会有缺失值
比如
2018-01-02 y=100
2018-01-04 y=120
这里1月3号的信息是缺失的,我希望是对这个缺失值进行线性填值,得到
2018-01-03 y=110
有时候,可能会连续缺失几天信息
比如
2018-01-02 y=100
2018-01-05 y=115
这样就需要填充两天
得到
2018-01-03 y=105
2018-01-04 y=110
python里如何方便地实现这个功能呢?
1个回答
方法如下
import pandas as pd
d = pd.DataFrame()
d['date'] = ['2019-01-01', '2019-01-02', '2019-01-04',
'2019-01-07', '2019-01-09', '2019-01-11']
d['val'] = [10, 20, 30, 40, 50, 30]
d['date'] = pd.to_datetime(d['date'])
上面的代码可以生成一个dataframe,如下
下面我们需要生成一个辅助dataframe,包含从2019-01-01到2019-01-11的所有日期。然后再将helper和d join起来
helper = pd.DataFrame({'date': pd.date_range(d['date'].min(), d['date'].max())})
d = pd.merge(d, helper, on='date', how='outer').sort_values('date')
现在得到的d是
最后一步就是插值了,直接用interpolate方法,method选择linear,线性
d['val'] = d['val'].interpolate(method='linear')
插值完的d如下: