2015-09-28 16 views
6

Ciao Ho il seguente dataframePython: ridurre la precisione panda timestamp dataframe

df = 

     Record_ID  Time 
     94704 2014-03-10 07:19:19.647342 
     94705 2014-03-10 07:21:44.479363 
     94706 2014-03-10 07:21:45.479581 
     94707 2014-03-10 07:21:54.481588 
     94708 2014-03-10 07:21:55.481804 

E 'possibile l'aver seguito?

df1 = 

     Record_ID  Time 
     94704 2014-03-10 07:19:19 
     94705 2014-03-10 07:21:44 
     94706 2014-03-10 07:21:45 
     94707 2014-03-10 07:21:54 
     94708 2014-03-10 07:21:55 
+0

È 'Time' di tipo' datetime'? –

+0

Questo importa? – EdChum

+0

Se digito 'type (df.Time [0])' restituisce 'pandas.tslib.Timestamp' – emax

risposta

5

Se davvero necessario rimuovere la parte microsecond del datetime, è possibile utilizzare il metodo Timestamp.replace con Series.apply metodo per applicarlo in tutta la serie, per sostituire la parte microsecond con 0. Esempio -

df['Time'] = df['Time'].apply(lambda x: x.replace(microsecond=0)) 

Demo -

In [25]: df 
Out[25]: 
    Record_ID      Time 
0  94704 2014-03-10 07:19:19.647342 
1  94705 2014-03-10 07:21:44.479363 
2  94706 2014-03-10 07:21:45.479581 
3  94707 2014-03-10 07:21:54.481588 
4  94708 2014-03-10 07:21:55.481804 

In [26]: type(df['Time'][0]) 
Out[26]: pandas.tslib.Timestamp 

In [27]: df['Time'] = df['Time'].apply(lambda x: x.replace(microsecond=0)) 

In [28]: df 
Out[28]: 
    Record_ID    Time 
0  94704 2014-03-10 07:19:19 
1  94705 2014-03-10 07:21:44 
2  94706 2014-03-10 07:21:45 
3  94707 2014-03-10 07:21:54 
4  94708 2014-03-10 07:21:55 
+0

È esattamente quello che stavo cercando. – emax

7

Si potrebbe convertire i sottostanti valori NumPy datetime64[ns] a datetime64[s] valori:

In [11]: df['Time'] = df['Time'].values.astype('datetime64[s]') 

In [12]: df 
Out[12]: 
    Record_ID    Time 
0  94704 2014-03-10 07:19:19 
1  94705 2014-03-10 07:21:44 
2  94706 2014-03-10 07:21:45 
3  94707 2014-03-10 07:21:54 
4  94708 2014-03-10 07:21:55 

Nota che reimpostazione di questi datetime64[s] valori per una colonna di un dataframe panda li converte automaticamente in datetime64[ns], quindi il risultato finale viene ancora archiviato come datetime64[ns] valori, ma la chiamata a astype causa la rimozione della parte frazionaria dei secondi.

+0

I panda supportano solo 'datetime64 [ns]'? C'è un modo integrato per cambiare la precisione. Dì come solo le date? – mnky9800n

+1

@ mnky9800n: Attualmente, i 'NDFrames' di Pandas supportano solo' datetime64 [ns] '. – unutbu

+0

Esiste un piano per supportare altri datetime? Penso che ci siano ovvi motivi perché gli intervalli datetime64 [ns] possono essere solo ~ 600 anni. – mnky9800n

Problemi correlati