Python: преобразование timedelta в int во фрейме данных

112

Я хотел бы создать столбец в фрейме данных pandas, который представляет собой целочисленное представление количества дней в столбце timedelta. Можно ли использовать datetime.days или мне нужно сделать что-то более ручное?

столбец timedelta

7 дн., 23:29:00

столбец целых чисел дня

7

Асаф Ханиш
источник
12
Вы пробовали использовать timedelta.days?
Ffisegydd 03

Ответы:

163

Используйте dt.daysатрибут. Доступ к этому атрибуту через:

timedelta_series.dt.days

Вы также можете получить secondsи microsecondsатрибуты таким же образом.

Abeboparebop
источник
11
Мне нравится этот комментарий из-за простоты и отсутствия необходимости импорта другой библиотеки.
NickBraunagel
68

Вы можете сделать это, где tdваша серия timedeltas. Деление преобразует наносекундные дельты в дельты дней, а преобразование в int уменьшается до целых дней.

import numpy as np

(td / np.timedelta64(1, 'D')).astype(int)
chrisb
источник
1
Спасибо! Еще через 15 минут поисков я нашел это. stackoverflow.com/questions/18215317/…
Асаф Ханиш
что такое /между tdи np?
Джейсон Гол
Это оператор деления timedelta64. Деление td на дневную дельту дает (возможно, дробное) количество дней, представленное в td. Не требуется в данном случае, но это действительно полезно, если, скажем, вы хотите
Дэвид
22

Объекты Timedelta имеют атрибуты экземпляров .days, доступные только для чтения .seconds, и .microseconds.

Цяо Чжан
источник
6

Если вопрос не только в том, "как получить доступ к целочисленной форме timedelta?" но "как преобразовать столбец timedelta в кадре данных в int?" ответ может быть немного другим. В дополнение к .dt.daysаксессору вам нужно либо df.astypeилиpd.to_numeric

Любой из этих вариантов должен помочь:

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

или

df['tdColumn'] = df['tdColumn'].dt.days.astype('int16')
CheapSquier
источник
Привет, я пробовал это, но у меня возникла ошибка ValueError: невозможно преобразовать неконечные значения (NA или inf) в целые числа, потому что в серии pandas есть nans. Вы знаете, с кем разбираться ???
Паблито
Второй вариант сработал для меня, и значения даты были типа timedelta64[ns]. Если ваши даты NaN, сначала преобразуйте их в datetime с помощью to_datetimeфункции pandas , а затем используйте второй вариант выше. Для получения более подробной информации кассы to_datetime
Onen Симона