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.