web-dev-qa-db-fra.com

Python: Convertissez timedelta en int dans un cadre de données

Je voudrais créer une colonne dans un cadre 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 jour entier

sept

76
Asaf Hanish

Utilisez l'attribut dt.days . Si td est le nom de votre série timedelta, accédez à cet attribut via:

_td.dt.days
_

Vous pouvez également obtenir les attributs seconds et microseconds de la même manière.

98
abeboparebop

Vous pouvez faire ceci, où td est votre série de timedeltas. La division convertit les deltas de la nanoseconde en deltas de jour et la conversion en int se transforme en jours entiers.

import numpy as np

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

Les objets Timedelta ont des attributs d'instance en lecture seule .days, .seconds et .microseconds.

13
Qiao Zhang

Si la question n'est pas simplement "comment accéder à une forme entière du timedelta?" mais "comment convertir la colonne timedelta dans le cadre de données en un entier?" la réponse pourrait être un peu différente. En plus de l'accesseur .dt.days, vous avez besoin de df.astype ou de pd.to_numeric.

L'une ou l'autre 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')
0
CheapSquier