2017-10-13 2 views
1

Ich habe einenUpsample Zeitreihen in Pandas mit Interpolation

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 

Jetzt bekomme ich

>>> 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 

wie ich erwarten würde, aber ich bekomme

>>> 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 

, wo ich erwartet hätte, dass der letzte Wert ist immer noch 8,0 und immer noch 7,0 für den Zeitstempel mit 6,5 Sekunden. Was ist damit?

+0

Was ist die erwartete Ausgabe? – Dark

+0

Vielleicht ein Fehler? Wenn ich die ursprüngliche Abtastfrequenz auf 0,99 ändere, erhalte ich nur Nullen nach der Interpolation –

+0

@Bharathshetty: Wie ich schrieb: der letzte Wert sollte 8.0 sein. – Make42

Antwort

0

Ein Weg, dies zumindest teilweise Recht bekommen (für reale Daten, die Ergebnisse sind nicht so toll, ich mit scipy's interp1d besserem Erfolg hatte) mean() zwischen den Methoden zu verwenden ist:

>>> 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 
Verwandte Themen