2013-05-13 19 views
9

Moja aplikacja wymaga do czynienia z danymi (zawarty w pliku CSV), który ma następującą postać:Pandy: Korzystanie Unix epoki timestamp jako indeks Datetime

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

Obecnie czytam CSV przy użyciu numpy metodę loadtxt (można łatwo użyj read_csv z Pandas). Obecnie dla mojej serii jestem konwersji pola znaczników czasu w następujący sposób:

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

śledzę to poprzez ustawienie timestamp_date jako indeks Datetime dla mojego DataFrame. Próbowałem wyszukiwać w kilku miejscach, aby sprawdzić, czy istnieje szybszy (wbudowany) sposób korzystania z tych znaczników czasu epoki Uniksa, ale nie można go znaleźć. Wiele aplikacji korzysta z takiej terminologii.

  1. Czy istnieje wbudowana metoda obsługi takich formatów sygnatur czasowych?
  2. Jeśli nie, jaki jest zalecany sposób obsługi tych formatów?

Odpowiedz

15

konwertować je do datetime64[s]:

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! Nie wiedziałem, że to może być takie proste! Najlepsze jest to, że zachowuje wrażenie wektoryzacji. –

+3

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

12

Można również użyć pandy to_datetime:

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

Ta metoda wymaga Pandy 0.18 lub nowszej.

1

Można również użyć pandy DatetimeIndex jak tak

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

*10**9 stawia go na format to spodziewa takich znaczników czasu.

To jest miłe, ponieważ pozwala korzystać z funkcji takich jak .date() lub .tz_localize() w serii.