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


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.


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)

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.


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')

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.