2017-10-13 131 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