Python: converter timedelta em int em um dataframe

111

Eu gostaria de criar uma coluna em um quadro de dados do pandas que é uma representação inteira do número de dias em uma coluna timedelta. É possível usar 'datetime.days' ou preciso fazer algo mais manual?

coluna timedelta

7 dias, 23:29:00

coluna inteira de dia

7

Asaf Hanish
fonte
12
Você já tentou usar timedelta.days?
Ffisegydd

Respostas:

160

Use o dt.daysatributo. Acesse este atributo por meio de:

timedelta_series.dt.days

Você também pode obter os atributos secondse microsecondsda mesma maneira.

abeboparebop
fonte
11
Gosto deste comentário pela simplicidade e por não exigir a importação de outra biblioteca.
NickBraunagel
67

Você poderia fazer isso, onde tdestá sua série de timedeltas. A divisão converte os deltas de nanossegundos em deltas de dia e a conversão em int cai para dias inteiros.

import numpy as np

(td / np.timedelta64(1, 'D')).astype(int)
chrisb
fonte
1
Obrigado! Também depois de mais 15 minutos de pesquisa eu encontrei isso. stackoverflow.com/questions/18215317/…
Asaf Hanish
para que serve /entre tde np?
Jason Goal
É o operador de divisão timedelta64. A divisão de td por um delta de tempo de 1 dia resulta no número (possivelmente fracionário) de dias representado em td. Não é obrigatório neste caso, mas é realmente útil se você quiser calcular quantos intervalos de 15 minutos td representa
David Waterworth
22

Objetos timedelta têm somente leitura atributos da instância .days, .secondse .microseconds.

Qiao Zhang
fonte
6

Se a questão não for apenas "como acessar uma forma inteira do timedelta?" mas "como converter a coluna timedelta no dataframe para um int?" a resposta pode ser um pouco diferente. Além do .dt.daysacessador, você precisa df.astypeoupd.to_numeric

Qualquer uma dessas opções deve ajudar:

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

ou

df['tdColumn'] = df['tdColumn'].dt.days.astype('int16')
CheapSquier
fonte
Olá, tentei fazer isso, mas obtive ValueError: não é possível converter valores não finitos (NA ou inf) em inteiros porque há nans na série pandas. Você sabe quem deve resolver isso ???
Pablito
A segunda opção funcionou para mim e os valores de data eram do tipo timedelta64[ns]. Se suas datas forem NaN, primeiro converta-as em data e hora usando a to_datetimefunção pandas e , em seguida, use a segunda opção acima. Para mais detalhes, checkout to_datetime
Onen simon