Python, вычитающий только время (ЧЧ: ММ: СС) из столбца DateTime - PullRequest
1 голос
/ 27 сентября 2019

У меня есть столбец DateTimes в кадре данных панд.Я хотел бы вычесть время начала из этих DateTimes.Время начала будет в тот же день, что и каждый из DateTimes.Это невозможно сделать с помощью следующего небольшого воспроизводимого примера:

import datetime
start_day = datetime.time(18, 30, 0) # 18:30:00 is the start time
datetime_object = datetime.datetime.now()
datetime_object.time() - start_day

TypeError: unsupported operand type(s) for -: 'datetime.time' and 'datetime.time'

Для меня не идеально разбивать dateTimes на отдельные столбцы даты и времени, чтобы выполнить этот расчет.Какие у меня есть альтернативы?

Спасибо

Редактировать:

Пример кадра данных и ожидаемый результат:

Room In DateTime      Desired Output (minutes)
2015-10-18 19:30:00   60
2015-10-18 21:39:00   99

Ответы [ 3 ]

1 голос
/ 27 сентября 2019

Симпт использовать datetime.timedelta .Попробуйте этот код:

import datetime
start_day = datetime.timedelta(hours=2, minutes=30)
datetime_object = datetime.datetime.now()     # 2019-09-27 18:23:06.684283
datetime_object - start_day                   # 2019-09-27 15:53:06.684283 
1 голос
/ 27 сентября 2019

Предыдущие ответы верны.Просто для пояснения:

При работе с датами операции между двумя объектами datetime будут возвращать объект timedelta (потому что между ними есть разница во времени), а операции между объектом datetime и дельтой времени будут возвращать datetimeобъект.Подводя итог, прочитайте следующие слова как объекты типа:

datetime + datetime = timedelta

datetime + timedelta = datetime

Еще несколько воспроизводимых кодов:

Операция между объектом datetime и объектом timedelta

from datetime import datetime, timedelta
today = datetime.today()

print(today)
datetime.datetime(2019, 9, 27, 13, 26, 50, 972445)

print(str(today))
'2019-09-27 13:26:50.972445'

print(type(today))
<class 'datetime.datetime'>

yesterday = today - timedelta(days=1)
print(yesterday)
datetime.datetime(2019, 9, 26, 13, 26, 50, 972445)

print(str(yesterday))
'2019-09-26 13:26:50.972445'

print(type(yesterday))
<class 'datetime.datetime'>

Операция между двумя объектами datetime

today - yesterday
datetime.timedelta(days=1)

str(today - yesterday)
'1 day, 0:00:00'

type(today-yesterday)
<class 'datetime.timedelta'

Надеюсь, это поможет:)

1 голос
/ 27 сентября 2019

Можете ли вы использовать timedelta вместо?

import datetime
datetime_object = datetime.datetime.now()
datetime_object - datetime.timedelta(hours=2, minutes=30)
2019-09-27 08:36:43.463856
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...