2017-10-13 134 views
1

我有一个上采样时间序列的大熊猫与插补

import pandas as pd 
index = pd.date_range('1/1/2000', periods=9, freq='0.9S') 
series = pd.Series(range(9), index=index) 

>>> series 
2000-01-01 00:00:00.000 0 
2000-01-01 00:00:00.900 1 
2000-01-01 00:00:01.800 2 
2000-01-01 00:00:02.700 3 
2000-01-01 00:00:03.600 4 
2000-01-01 00:00:04.500 5 
2000-01-01 00:00:05.400 6 
2000-01-01 00:00:06.300 7 
2000-01-01 00:00:07.200 8 
Freq: 900L, dtype: int64 

现在,我得到

>>> series.resample(rule='0.5S').head(100) 
2000-01-01 00:00:00.000 0.0 
2000-01-01 00:00:00.500 1.0 
2000-01-01 00:00:01.000 NaN 
2000-01-01 00:00:01.500 2.0 
2000-01-01 00:00:02.000 NaN 
2000-01-01 00:00:02.500 3.0 
2000-01-01 00:00:03.000 NaN 
2000-01-01 00:00:03.500 4.0 
2000-01-01 00:00:04.000 NaN 
2000-01-01 00:00:04.500 5.0 
2000-01-01 00:00:05.000 6.0 
2000-01-01 00:00:05.500 NaN 
2000-01-01 00:00:06.000 7.0 
2000-01-01 00:00:06.500 NaN 
2000-01-01 00:00:07.000 8.0 
Freq: 500L, dtype: float64 

为我所期望的,但我得到

>>> series.resample(rule='0.5S').interpolate(method='linear') 
2000-01-01 00:00:00.000 0.000000 
2000-01-01 00:00:00.500 0.555556 
2000-01-01 00:00:01.000 1.111111 
2000-01-01 00:00:01.500 1.666667 
2000-01-01 00:00:02.000 2.222222 
2000-01-01 00:00:02.500 2.777778 
2000-01-01 00:00:03.000 3.333333 
2000-01-01 00:00:03.500 3.888889 
2000-01-01 00:00:04.000 4.444444 
2000-01-01 00:00:04.500 5.000000 
2000-01-01 00:00:05.000 5.000000 
2000-01-01 00:00:05.500 5.000000 
2000-01-01 00:00:06.000 5.000000 
2000-01-01 00:00:06.500 5.000000 
2000-01-01 00:00:07.000 5.000000 
Freq: 500L, dtype: float64 

,我本来预计,最后一个值仍然是8.0,对于6.5秒的时间戳仍然是7.0。那是怎么回事?

+0

什么是预期输出? – Dark

+0

也许是一个错误?当我将原始采样频率更改为0.99时,插值后我只得到零点 –

+0

@Bharathshetty:正如我写的:最后一个值应该是8.0。 – Make42

回答

0

得到这至少部分地权(为真实数据,结果都不是很大,我有更好的成功与scipy's interp1d)是在方法之间使用mean()的方式:

>>> series.resample(rule='0.5S').mean().interpolate(method='linear') 
2000-01-01 00:00:00.000 0.0 
2000-01-01 00:00:00.500 1.0 
2000-01-01 00:00:01.000 1.5 
2000-01-01 00:00:01.500 2.0 
2000-01-01 00:00:02.000 2.5 
2000-01-01 00:00:02.500 3.0 
2000-01-01 00:00:03.000 3.5 
2000-01-01 00:00:03.500 4.0 
2000-01-01 00:00:04.000 4.5 
2000-01-01 00:00:04.500 5.0 
2000-01-01 00:00:05.000 6.0 
2000-01-01 00:00:05.500 6.5 
2000-01-01 00:00:06.000 7.0 
2000-01-01 00:00:06.500 7.5 
2000-01-01 00:00:07.000 8.0 
Freq: 500L, dtype: float64