2013-05-13 4 views
9

mia applicazione prevede il trattamento dei dati (contenuto in un CSV), che è la forma seguente:Pandas: Mediante Unix epoca timestamp come indice Datetime

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

Attualmente ho letto CSV utilizzando il metodo loadtxt NumPy (può facilmente usa read_csv da Pandas). Attualmente per la mia serie sto convertendo il campo timestamp come segue:

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

seguo questo impostando timestamp_date come indice Datetime per il mio dataframe. Ho provato a cercare in vari posti per vedere se c'è un modo più veloce (integrato) di usare questi timestamp di epoca Unix, ma non ne ho trovato nessuno. Molte applicazioni fanno uso di tale terminologia di timestamp.

  1. Esiste un metodo integrato per la gestione di tali formati di timestamp?
  2. In caso contrario, qual è il modo consigliato di gestire questi formati?

risposta

15

convertirli in 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! Non sapevo che potrebbe essere così facile! La parte migliore è che conserva la sensazione di un'operazione vettoriale. –

+3

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

12

È inoltre possibile utilizzare i panda to_datetime:

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

Questo metodo richiede Pandas 0.18 o successiva.

1

È inoltre possibile utilizzare Pandas DatetimeIndex in questo modo

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

il *10**9 lo mette nel formato che aspetta per tali timestamp.

Ciò è utile poiché consente di utilizzare funzioni come .date() o .tz_localize() nella serie.