Python: convertir timedelta en int dans un dataframe


111

Je voudrais créer une colonne dans une trame de données pandas qui est une représentation entière du nombre de jours dans une colonne timedelta. Est-il possible d'utiliser 'datetime.days' ou dois-je faire quelque chose de plus manuel?

colonne timedelta

7 jours, 23:29:00

colonne entière de jour

7


12
Avez-vous essayé d'utiliser timedelta.days?
Ffisegydd

Réponses:


162

Utilisez l' dt.daysattribut. Accédez à cet attribut via:

timedelta_series.dt.days

Vous pouvez également obtenir les attributs secondset microsecondsde la même manière.


11
J'aime ce commentaire pour la simplicité et ne nécessitant pas l'importation d'une autre bibliothèque.
NickBraunagel

68

Vous pouvez le faire, où tdest votre série de timedeltas. La division convertit les deltas de la nanoseconde en deltas de jour et la conversion en int tombe en jours entiers.

import numpy as np

(td / np.timedelta64(1, 'D')).astype(int)

1
Merci! Aussi après 15 minutes supplémentaires de recherche, j'ai trouvé ceci. stackoverflow.com/questions/18215317/…
Asaf Hanish

quel est le /pour entre tdet np?
Jason Goal

C'est l'opérateur de la division timedelta64. La division de td par un delta de temps de 1 jour donne le nombre (éventuellement fractionnaire) de jours représenté en td. Non requis dans ce cas, mais c'est vraiment utile si vous voulez savoir combien d'intervalles de 15 minutes td représente
David Waterworth

22

Objets timedelta ont des attributs d'instance en lecture seule .days, .secondset .microseconds.


6

Si la question n'est pas seulement "comment accéder à une forme entière du timedelta?" mais "comment convertir la colonne timedelta dans le dataframe en un int?" la réponse pourrait être un peu différente. En plus de l' .dt.daysaccesseur, vous devez soit df.astypeoupd.to_numeric

Chacune de ces options devrait aider:

df['tdColumn'] = pd.to_numeric(df['tdColumn'].dt.days, downcast='integer')

ou

df['tdColumn'] = df['tdColumn'].dt.days.astype('int16')

Salut, j'ai essayé cela, mais j'ai eu ValueError: Impossible de convertir des valeurs non finies (NA ou inf) en entier car il y a des nans dans la série pandas. Savez-vous à qui trier ça ???
Pablito

La deuxième option a fonctionné pour moi et les valeurs de date étaient de type timedelta64[ns]. Si vos dates sont NaN, convertissez-les d'abord en datetime à l'aide de la to_datetimefonction pandas , puis utilisez la deuxième option ci-dessus. Pour plus de détails, consultez to_datetime
Onen simon le
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.