Вычитая строку и datetime.time неоднократно

1

У меня есть dataframe pandas, который имеет столбец "Time", который имеет строки, такие как 13:50:00 (это строка типа). Теперь у меня есть время формата и значения 21:21:21 Я хочу вычесть два.

Теперь я сделал abs (datetime.strptime(a, '% H:% M:% S'). Time() - record_start_time)), который все еще дает мне ошибку

print(abs(datetime.strptime(a, '%H:%M:%S').time()- recording_start_time))
TypeError: unsupported operand type(s) for -: 'datetime.time' and 'datetime.time'

Мой код выглядит like-

 min_time_diff = abs(df3.loc[cond & cond2 ]['Time'].apply(lambda x: datetime.strptime(x, '%H:%M:%S').time()- recording_start_time))

поэтому мне нужно более чистое решение, чем вычитание два раза в python, предоставленное здесь, поскольку оно выполняет поиск по всем строкам в столбце "Время" и вычитанию из фиксированного значения.

Теги:
pandas
numpy

1 ответ

2

Вы можете преобразовать в datetime, вычесть из timedelta и вернуться к time -only с помощью .dt accessor

delta = datetime.timedelta(hours=21, minutes=21, seconds=21)
diff = pd.to_datetime(df.t, format="%H:%M:%S") - delta
>>> diff.dt.time

Пример:

df = pd.DataFrame({'t':[time(2),time(8)]})

    t
0   02:00:00
1   08:00:00

d = pd.to_datetime(df.t, format="%H:%M:%S") - datetime.timedelta(minutes=1, seconds=1, hours=1)
d.dt.time

0    00:58:59
1    06:58:59
Name: t, dtype: object
  • 0
    моя фиксированная переменная - record_start_time с типом данных datetime.time, а столбец ['Time'] имеет строку формата ... можете ли вы показать, как это применимо в моем случае?
  • 0
    @ubuntu_noob тот же код должен работать и для вашего случая :) просто создайте datetime.timedelta из вашего объекта time , делая datetime.timedelta(hours= recording_start_time.hour, minutes = recording_start_time.minutes, ... ) и т. д.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню