2016-06-15 5 views
5

Ich habe einen Datenrahmen in Pandas in der folgenden Form:Pandas Datenrahmen resample pro Tag ohne Datum Zeitindex

 timestamps   light 
7 2004-02-28 00:58:45 150.88 
26 2004-02-28 00:59:45 143.52 
34 2004-02-28 01:00:45 150.88 
42 2004-02-28 01:01:15 150.88 
59 2004-02-28 01:02:15 150.88 

Hier beachten Sie, dass der Index nicht die Zeitstempel Spalte ist. Aber ich möchte resample (oder die Daten irgendwie ablegen), um den Durchschnittswert der Lichtsäule pro Minute, Stunde, Tag usw. zu reflektieren. Ich habe die Methode resample untersucht, die Pandas anbietet, und es erfordert den Dataframe, einen Datenzeitindex zu haben damit die Methode funktioniert (sofern ich das nicht missverstanden habe).

  1. Also meine erste Frage ist, kann ich neu indiziert die Datenrahmen Zeitstempel als den Index haben (beachten Sie, dass nicht jede Zeile einen eindeutigen Zeitstempel hat und für jeden Zeitstempel gibt es etwa 30 Zeilen mit demselben Zeitstempel , die jeweils einen Sensor darstellen).

  2. Wenn nicht, gibt es einen anderen Weg, um möglicherweise einen anderen Datenrahmen zu erreichen, der den Durchschnittswert von Licht pro Stunde, pro Tag, pro Monat usw. hat?

Jede Hilfe wäre willkommen.

Antwort

5

Sie haben Recht - Notwendigkeit DatetimeIndex, TimedeltaIndex oder PeriodIndex sonst Fehler:

TypeError: Only valid with DatetimeIndex, TimedeltaIndex or PeriodIndex, but got an instance of 'Index'

So haben Sie zum ersten reset_index und set_index wenn original index wichtig ist:

print (df.reset_index().set_index('timestamps')) 
        index light 
timestamps       
2004-02-28 00:58:45  7 150.88 
2004-02-28 00:59:45  26 143.52 
2004-02-28 01:00:45  34 150.88 
2004-02-28 01:01:15  42 150.88 
2004-02-28 01:02:15  59 150.88 

, wenn nicht nur set_index:

print (df.set_index('timestamps')) 
         light 
timestamps     
2004-02-28 00:58:45 150.88 
2004-02-28 00:59:45 143.52 
2004-02-28 01:00:45 150.88 
2004-02-28 01:01:15 150.88 
2004-02-28 01:02:15 150.88 

und dann resample:

print (df.reset_index().set_index('timestamps').resample('1D').mean()) 
      index light 
timestamps     
2004-02-28 33.6 149.408