Comment puis-je réinitialiser la partie heure d'un horodatage de pandas?
Je veux réinitialiser une partie du temps en valeur de pandas.Timestamp.
Je suppose que je peux le faire en utilisant la procédure suivante.
Même si ma supposition est correcte, cela prend trop de temps. Existe-t-il un moyen simple d'atteindre cet objectif?
Dans [371]: ts = pd.Timestamp ('2014/11/12 13:35')
Dans [372]: ts
Out [372]: Horodatage ('2014-11-12 13:35:00')
Dans [373]: ts.hour = 0 # <- c'est ce que j'essaie de faire.
Je pense que vous recherchez la méthode replace
(voir 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')
Ceci est une méthode héritée de datetime.datetime
Si vous souhaitez réinitialiser la période complète, vous spécifiez toutes les parties dans replace
:
In [20]: ts.replace(hour=0, minute=0, second=0)
Out[20]: Timestamp('2014-11-12 00:00:00')
Il existe également une méthode DatetimeIndex.normalize
, mais celle-ci n’est pas disponible pour les horodatages individuels (j’ai ouvert un numéro pour cela: https://github.com/pydata/pandas/issues/8794 ):
In [21]: pd.DatetimeIndex([ts]).normalize()[0]
Out[21]: Timestamp('2014-11-12 00:00:00')
Notez que la méthode replace
ne modifie pas l'horodatage. Par conséquent, si vous souhaitez conserver l'horodatage modifié, vous devez affecter:
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')
Remarque: ts n'est pas modifié dans le code ci-dessus.
In [5]: ts = ts.replace(hour=0)
In [6]: ts
Out[6]: Timestamp('2014-11-12 00:35:00')
Au lieu d'utiliser datetime.datetime
, utilisez datetime.date
et il tronquera automatiquement l'heure/minute/seconde pour vous.
Voir https://docs.python.org/library/datetime.html#date-objects
pd.Timestamp('2014-11-12 13:35') - pd.offsets.Micro(0, normalize=True) == Timestamp('2014-11-12 00:00:00')