Python:如何线性插入月度数据?

时间:2018-05-27 20:05:46

标签: python pandas numpy interpolation

我对python很新,特别是数据库,所以请原谅任何白痴。

我正在尝试用12个月的月度观察数据进行练习,数据看起来像这样......

resampled1 = data.resample('MS')
interp1 = resampled1.interpolate()

print(interp1)

这些月度观察是不规则的(每个月只有一个,但几乎不可能在同一时间)。

现在,我想使用线性插值来获取每个月初的值 -

我尝试了很多方法......并且能够'手动'做到这一点,但是我正试图抓住大熊猫和numpy,我知道可以用这些来完成,这里是什么我到目前为止:我制作一个系列保存数据,然后我做:

2017-04-01   NaN
2017-05-01   NaN
2017-06-01   NaN
2017-07-01   NaN
2017-08-01   NaN
2017-09-01   NaN
2017-10-01   NaN
2017-11-01   NaN
2017-12-01   NaN
2018-01-01   NaN
2018-02-01   NaN
2018-03-01   NaN
2018-04-01   NaN

打印:

Sub test()

Dim x As Double, y As Double, z As Double

    x = 10000
    y = 0.2
    z = Range("B1").Value
    Range("A8") = (z - x) * y

End Sub

现在,我知道第一个2017-4-17应该是NaN作为线性插值(我认为是默认值),在前后两点之间进行插值...这是不可能的,因为我不能在4月1日之前有一个数据点。至于其他人......我不确定我做错了什么......可能只是因为我正在努力绕着正确的重新样本做什么?

2 个答案:

答案 0 :(得分:1)

您可能希望resample('D')进行插值,例如:

In []:
data.resample('D').interpolate().asfreq('MS')

Out[]:
2017-05-01  194.181818
2017-06-01  274.545455
2017-07-01  251.666667
2017-08-01  182.000000
2017-09-01  159.041667
2017-10-01  135.666667
2017-11-01  242.894737
2017-12-01  375.490566
2018-01-01  490.645161
2018-02-01  463.086957
2018-03-01  293.315789
2018-04-01  234.019231

答案 1 :(得分:1)

尝试使用RedBlackPy

from datetime import datetime
import redblackpy as rb

index = [datetime(2017,4,17), datetime(2017,5,9), datetime(2017,6, 11)]
values = [156, 216, 300]

series = rb.Series(index=index, values=values, interpolate='linear')
# Now you can access by any key with no insertion, using interpolation.
print(series[datetime(2017, 5, 1)]) # prints 194.18182373046875