我对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日之前有一个数据点。至于其他人......我不确定我做错了什么......可能只是因为我正在努力绕着正确的重新样本做什么?
答案 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