web-dev-qa-db-fra.com

Réinitialiser le temps dans un horodatage de pandas

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.

  • étape 1) Horodatage au type date/heure
  • étape 2) date/heure en secondes
  • étape 3) tronquer la partie heure en secondes
  • étape 4) ramener les secondes à l'horodatage

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.

11
Hill

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')
18
joris

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')
1
Nadav Aharoni

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

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