python时间序列进行线性插值_利用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,如下:

1717ba4bf4cd3ec0?w=204&h=264&f=png&s=2796

下面我们需要生成一个辅助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是

1717ba5d0a4c8350?w=232&h=460&f=png&s=5532

最后一步就是插值了,直接用interpolate方法,method选择linear,线性

d[‘val‘] = d[‘val‘].interpolate(method=‘linear‘)

插值完成后的d如下:

1717ba6dfaeb25b5?w=276&h=468&f=png&s=5690

cookies

假如你的时间不是按照天来填充,而且按照小时来插值的话,helper则需要进行更改

helper = pd.DataFrame({‘date‘: pd.date_range(d[‘date‘].min(), d[‘date‘].max(), freq=‘H‘)})

这里的freq参数就是生成时间区间精确的位数

插值选择方法不止有线性,还可以是

nearest:最邻近插值法

zero:阶梯插值

slinear、linear:线性插值

quadratic、cubic:2、3阶B样条曲线插值(详情请参考官方文档)

原文:https://www.cnblogs.com/zhenyauntg/p/13188221.html

  • 0
    点赞
  • 1
    收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:数字20 设计师:CSDN官方博客 返回首页
评论
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值