J'ai un DataFrame avec trois colonnes, une date et deux fois. Il est comme ça:La conversion de l'objet pandas en timedelta donne NaT
date hour_in hour_out
0 01/06/2016 08:15 19:37
1 02/06/2016 08:26 17:31
2 03/06/2016 08:08 21:31
Je suis en train de convertir hour_in
et hour_out
à timedelta en utilisant ce code (qui est basé sur une réponse sur cette question Dates from 1900-01-01 are added to my 'Time' after using df['Time'] = pd.to_datetime(phData['Time'], format='%H:%M:%S')):
df['hora_entrada'] = pd.to_timedelta(df['hora_entrada'], errors='coerce')
df['hora_saida'] = pd.to_timedelta(df['hora_saida'] , errors='coerce')
Après le casting, mon La colonne est convertie en le type correct timedelta64[ns]
, mais toutes les valeurs sont définies sur NaT
. Mes df.info()
renvoie cette:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 439 entries, 0 to 438
Data columns (total 4 columns):
data 439 non-null datetime64[ns]
hour_in 0 non-null timedelta64[ns]
hour_out 0 non-null timedelta64[ns]
dtypes: datetime64[ns](1), timedelta64[ns](2)
et la sortie de données est comme ceci:
data hora_entrada hora_saida
0 2016-06-01 NaT NaT
1 2016-06-02 NaT NaT
2 2016-06-03 NaT NaT
J'ai essayé de convertir les colonnes de temps à datetime
puis à timedelta
mais j'ai obtenu des résultats étranges. Voici un exemple:
data hora_entrada hora_saida
0 2016-06-01 -25567 days +08:15:00 -25567 days +19:37:00
1 2016-06-02 -25567 days +08:26:00 -25567 days +17:31:00
2 2016-06-03 -25567 days +08:08:00 -25567 days +21:31:00
Je pense qu'il est parce que quand je le convertir en datetime
il est ajouté à l'heure une date 1900-01-01
.
Merci! Cela a fonctionné avec votre solution. Pouvez-vous juste expliquer pourquoi cette approuch fonctionne et celle que j'essayais ne fonctionne pas? – aiquis
@aiquis, 'pd.to_timedelta' attend soit une chaîne à temps plein (format:'% H:% M:% S'), soit un nombre numérique d'unités (secondes, millisecondes, microsecondes, nanosecondes) à partir du '1970-01- 01 00:00:00 UTC' ... – MaxU