2016-12-13 2 views
3

Ist es irgendwie möglich, resample auf unregelmäßigen Daten zu verwenden? (Ich weiß, dass die Dokumentation sagt, dass es für "Resampling von regulären Zeitreihendaten" ist, aber ich wollte versuchen, ob es auch an irregulären Daten arbeitet. Vielleicht tut es das nicht, oder vielleicht mache ich etwas falsch.)resample unregelmäßig verteilten Daten in Pandas

In meinen realen Daten habe ich im Allgemeinen 2 Proben pro Stunde, die Zeitdifferenz zwischen ihnen reicht normalerweise von 20 bis 40 Minuten. Also habe ich gehofft, sie zu einer regelmäßigen Stundenserie zu resampeln.

Um zu testen, ob ich es richtig verwende, habe ich eine zufällige Liste von Daten verwendet, die ich bereits hatte, also ist es vielleicht kein bestes Beispiel, aber zumindest eine Lösung, die dafür arbeitet, wird sehr robust sein. hier ist sie:

fraction number    time 
0 0.729797  0 2014-10-23 15:44:00 
1 0.141084  1 2014-10-30 19:10:00 
2 0.226900  2 2014-11-05 21:30:00 
3 0.960937  3 2014-11-07 05:50:00 
4 0.452835  4 2014-11-12 12:20:00 
5 0.578495  5 2014-11-13 13:57:00 
6 0.352142  6 2014-11-15 05:00:00 
7 0.104814  7 2014-11-18 07:50:00 
8 0.345633  8 2014-11-19 13:37:00 
9 0.498004  9 2014-11-19 22:47:00 
10 0.131665  10 2014-11-24 15:28:00 
11 0.654018  11 2014-11-26 10:00:00 
12 0.886092  12 2014-12-04 06:37:00 
13 0.839767  13 2014-12-09 00:50:00 
14 0.257997  14 2014-12-09 02:00:00 
15 0.526350  15 2014-12-09 02:33:00 

Jetzt möchte ich monatlich diese zum Beispiel sampeln:

df_new = df.set_index(pd.DatetimeIndex(df['time'])) 
df_new['fraction'] = df.fraction.resample('M',how='mean') 
df_new['number'] = df.number.resample('M',how='mean') 

Aber ich bekomme TypeError: Only valid with DatetimeIndex, TimedeltaIndex or PeriodIndex, but got an instance of 'RangeIndex' - es sei denn, ich etwas falsch mit Zuordnung des Datetime-Index hat, muss es aufgrund der sein Unregelmäßigkeit?

Also meine Fragen sind:

  1. Bin ich es richtig verwenden?
  2. Wenn 1 == True, gibt es keine einfache Möglichkeit, die Daten neu zu berechnen?

(Ich sehe nur eine Lösung in die Daten zuerst reindexing feinere Intervalle zu erhalten, die Werte zwischen interpolieren und dann zu stündlichen Intervall reindexing. Wenn es so ist, dann wird eine Frage in Bezug auf die korrekte Umsetzung der reindex in Kürze folgen.)

+0

Pandas Version 0.18.1, Python 2.7 – durbachit

Antwort

2

Sie brauchen nicht explizit DatetimeIndex zu verwenden, setzten Sie nur 'time' als den Index und Pandas kümmern sich um den Rest kümmern, solange Ihre 'time' Spalt zu konvertierende Zeitangabe wurden pd.to_datetime oder ein anderes Verfahren unter Verwendung von . Darüber hinaus müssen Sie nicht jede Spalte einzeln neu berechnen, wenn Sie die gleiche Methode verwenden. tun Sie es einfach auf dem gesamten DataFrame.

# Convert to datetime, if necessary. 
df['time'] = pd.to_datetime(df['time']) 

# Set the index and resample (using month start freq for compact output). 
df = df.set_index('time') 
df = df.resample('MS').mean() 

Die resultierende Ausgabe:

  fraction number 
time       
2014-10-01 0.435441  0.5 
2014-11-01 0.430544  6.5 
2014-12-01 0.627552 13.5 
+0

habe ich tatsächlich die 'DatetimeIndex' als Reaktion auf die' TypeError', in der Hoffnung es es lösen würde, aber es didn t. Aber danke, die Vereinfachung funktioniert tatsächlich! Ich habe dieses Beispiel http://benalexkeen.com/resampling-time-series-data-with-pandas/ verfolgt, das es wahrscheinlich überkompliziert. – durbachit

Verwandte Themen