2013-05-13 13 views
9

Meine Anwendung beinhaltet mit Daten (in einer CSV enthalten ist) zu tun, welche der folgenden Form ist:Pandas: Mit Unix Unix-Zeitstempel als Datum- Index

Epoch (number of seconds since Jan 1, 1970), Value 
1368431149,20.3 
1368431150,21.4 
.. 

Zur Zeit lese ich die CSV numpy loadtxt Methode (leicht benutze read_csv von Pandas). Derzeit für meine Serie bin Umwandlung ich die Zeitstempel-Feld wie folgt:

timestamp_date=[datetime.datetime.fromtimestamp(timestamp_column[i]) for i in range(len(timestamp_column))] 

ich diese folgen von timestamp_date als Datetime-Index für meine Datenrahmen zu setzen. Ich habe versucht, an mehreren Stellen zu suchen, um zu sehen, ob es einen schnelleren (eingebauten) Weg gibt, diese Unix-Epochen-Zeitstempel zu verwenden, konnte aber keine finden. Viele Anwendungen nutzen diese Terminologie.

  1. Gibt es eine integrierte Methode für die Verarbeitung solcher Zeitstempelformate?
  2. Wenn nicht, was ist die empfohlene Vorgehensweise für die Verarbeitung dieser Formate?

Antwort

15

sie datetime64[s] Konvertieren:

df['datetime'] = pd.to_datetime(df["timestamp"], unit='s') 

Diese Methode erfordert Pandas 0,18 oder höher:

np.array([1368431149, 1368431150]).astype('datetime64[s]') 
# array([2013-05-13 07:45:49, 2013-05-13 07:45:50], dtype=datetime64[s]) 
+1

Wow! Wusste nicht, dass es so einfach sein könnte! Der beste Teil ist, dass es das Gefühl einer vektorisierten Operation beibehält. –

+3

N.B. https://github.com/pydata/pandas/issues/3540 –

12

Sie auch Pandas to_datetime verwenden können.

1

Sie können auch Pandas DatetimeIndex wie verwenden, so

pd.DatetimeIndex(df['timestamp']*10**9) 

die *10**9 es in das Format für eine solche Zeitstempel es erwartet bringt.

Dies ist nett, da Sie Funktionen wie .date() oder .tz_localize() auf der Serie verwenden können.