Python: Перетворити timedelta в int у фреймі даних


111

Я хотів би створити стовпчик у кадрі даних панди, який представляє ціле представлення кількості днів у стовпці timedelta. Чи можна використовувати 'datetime.days' чи мені потрібно зробити щось більш ручне?

стовпець timedelta

7 днів, 23:29:00

цілий день стовпця

7


12
Ви намагалися використовувати timedelta.days?
Ffisegydd

Відповіді:


160

Використовуйте dt.daysатрибут. Доступ до цього атрибута здійснюється за допомогою:

timedelta_series.dt.days

Ви також можете отримати атрибути secondsі microsecondsтим самим способом.


11
Мені подобається цей коментар за простоту і не потребує імпорту іншої бібліотеки.
NickBraunagel

67

Ви могли б це зробити, де tdваша серія тиммедел. Поділ перетворює дельти наносекунди в денні дельти, а перетворення на int падає на цілі дні.

import numpy as np

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

1
Дякую! Також після ще 15 хвилин пошуку я знайшов це. stackoverflow.com/questions/18215317/…
Асаф Ханіш

що таке /між tdі np?
Гол Джейсона

Це оператор відділу timedelta64. Поділ td на дельту часу на 1 день - це результат (можливо, дробове) число днів, представлене в td. У цьому випадку не потрібно, але це дуже корисно, якщо ви скажете, що хочете розібратися, скільки представляє інтервал 15 хвилин td
Девід

22

Об'єкти Timedelta тільки для читання атрибутів примірника .days, .secondsі .microseconds.


6

Якщо питання не лише в тому, як "отримати доступ до цілої форми тиммеделі?" але "як перетворити стовпець 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')

Привіт, я спробував це, але я отримав ValueError: Неможливо перетворити нескінченні значення (NA або inf) у цілі числа, оскільки в серіях панд є нан. Ви знаєте, хто розібратися в цьому ???
Пабліто

Другий варіант працював для мене і значення дати були типу timedelta64[ns]. Якщо ваші дати - NaN, спочатку перетворіть їх у дату за допомогою функції панди to_datetime, а потім скористайтеся другим варіантом вище. Більш детально оформити
Onen simon
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.