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

Asaf Hanish
la source
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.

abeboparebop
la source
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)
chrisb
la source
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.

Qiao Zhang
la source
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')
Pas cherSquier
la source
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