Преобразование последовательной разницы во времени (timedelta) в секунды

Я рассчитал свою последовательную разницу во времени в моем DataFrame d, используя:

d['delta'] = (d['time'] - d['time'].shift()).fillna(0)

Итак, у меня есть разница во времени в столбце «дельта». Мой вопрос в том, как я могу преобразовать это в секунды? Вывод в формате 00:50:00, я хочу преобразовать его в 3000 секунд.


person Hamid K    schedule 31.10.2015    source источник


Ответы (1)


Ваш столбец имеет тип timedelta64, поэтому вы можете использовать метод доступа .dt, чтобы найти свойство seconds:

d['delta'].dt.seconds

Дополнительную информацию о методе доступа .dt можно найти здесь.


Как отмечает @Jeff в комментариях, вам, вероятно, будет лучше использовать total_seconds() вместо seconds; последний возвращает только целые (целые) числа секунд (по модулю 1 день == 86400 секунд), тогда как первый возвращает значения с плавающей запятой, считая меньшие единицы времени (мс, нс), а также дни в направлении Значение:

d['delta'].dt.total_seconds()
person Alex Riley    schedule 31.10.2015
comment
AttributeError: объект «Серия» не имеет атрибута «dt» - person Hamid K; 31.10.2015
comment
Какую версию панд вы используете (pd.__version__)? - person Alex Riley; 31.10.2015
comment
Это очень старая версия панд. Аксессор .dt был введен примерно в 0.15. Текущая версия — 0.17 — я настоятельно рекомендую вам обновить ее из-за многочисленных улучшений и исправлений ошибок. - person Alex Riley; 31.10.2015
comment
Я пытаюсь обновить его - person Hamid K; 31.10.2015
comment
и вы действительно хотите выполнить преобразование частоты, например. d['delta'].dt.total_seconds() или d['delta'].astype('timedelta64[s]'), см. документацию здесь - person Jeff; 31.10.2015
comment
@ajcr, .dt.seconds возвращает количество секунд, не включая дроби, и менее 1 дня, как это делает datetime.timedelta, например. Timedelta("1 day 10 min 1 seconds").seconds == 601. Лично я нахожу это запутанным, но еще более запутанным делать что-то отличное от встроенных. - person Jeff; 31.10.2015
comment
@Jeff: спасибо за разъяснение и дополнительную информацию - приятно знать обоснование методов. - person Alex Riley; 01.11.2015