利用python對時間序列中缺失值進行線性插值


開門見山的說

時間序列每天對應一個數值點,但是有時候會有缺失值,比如:

2020-04-10 y=100

2020-04-12 y=120

這里4月11號的信息是缺失的,目標是對這個缺失值進行線性填值,得到:

2020-04-11 y=110

有時候,也有可能連續缺失幾天信息,比如:

2020-04-10 y=100

2020-04-13 y=115

這樣就需要填充兩天,得到:

2020-04-11 y=105
2020-04-12 y=110

python解決方案

import pad=ndas 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如下:

cookies

  1. 假如你的時間不是按照天來填充,而且按照小時來插值的話,helper則需要進行更改
helper = pd.DataFrame({'date': pd.date_range(d['date'].min(), d['date'].max(), freq='H')})

這里的freq參數就是生成時間區間精確的位數

  1. 插值選擇方法不止有線性,還可以是

    nearest:最鄰近插值法

    zero:階梯插值

    slinear、linear:線性插值

    quadratic、cubic:2、3階B樣條曲線插值(詳情請參考官方文檔)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM