2014-11-12 5 views
7

Come posso reimpostare la parte temporale di un timestamp di panda?Ora di azzeramento parte di un timestamp di panda

Voglio reimpostare la parte di tempo nel valore di panda. Timestamp.
Immagino di poterlo fare usando la seguente procedura.

  • passaggio 1) Timestamp di tipo datetime
  • passaggio 2) datetime secondi
  • passaggio 3) troncare parte tempo in secondi
  • passaggio 4) riportare secondi per timestamp

Anche se la mia ipotesi è corretta, ci vuole troppo tempo per farlo. Esiste un modo semplice per raggiungere questo obiettivo?

In [371]: ts = pd.Timestamp ('2014/11/12 13:35')

In [372]: ts

Out [372]: Timestamp (' 2014-11-12 13:35:00 ')

In [373]: ts.hour = 0 # < - questo è quello che sto cercando di fare.

+0

Se si ha a che fare con un '' DatetimeIndex'', è possibile utilizzare il metodo 'normalize'. Questo tuttavia non è disponibile nel Timestamp individuale (una soluzione è: 'pd.DatetimeIndex ([ts]). Normalize() [0]') – joris

+0

Si desidera reimpostare la parte di tempo 'intero' (solo mantenere la data), o vuoi solo resettare le ore? – joris

+0

parti intere. – Hill

risposta

14

Penso che si sta cercando il metodo replace (vedi docs):

In [18]: ts 
Out[18]: Timestamp('2014-11-12 13:35:00') 

In [19]: ts.replace(hour=0) 
Out[19]: Timestamp('2014-11-12 00:35:00') 

Questo è un metodo ereditato da datetime.datetime

Se si vuole azzerare il tempo pieno parte, si specifica tutte le parti in replace:

In [20]: ts.replace(hour=0, minute=0, second=0) 
Out[20]: Timestamp('2014-11-12 00:00:00') 

V'è anche un metodo di DatetimeIndex.normalize, ma questo non è disponibile sui singoli Timestamps (ho aperto un problema per questo: https://github.com/pydata/pandas/issues/8794):

In [21]: pd.DatetimeIndex([ts]).normalize()[0] 
Out[21]: Timestamp('2014-11-12 00:00:00') 
+0

Grazie. Questo è quello che stavo cercando. – Hill

0
pd.Timestamp('2014-11-12 13:35') - pd.offsets.Micro(0, normalize=True) == Timestamp('2014-11-12 00:00:00') 
0

Si noti che il metodo replace non cambia il timestamp, quindi se si desidera mantenere il timestamp modificato è necessario assegnare:

In [2]: ts = pd.Timestamp('2014/11/12 13:35') 
In [3]: ts.replace(hour=0) 
Out[3]: Timestamp('2014-11-12 00:35:00') 
In [4]: ts 
Out[4]: Timestamp('2014-11-12 13:35:00') 

Nota: tS non è modificato nel codice sopra.

In [5]: ts = ts.replace(hour=0) 
In [6]: ts 
Out[6]: Timestamp('2014-11-12 00:35:00')