У меня есть 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, предоставленное здесь, поскольку оно выполняет поиск по всем строкам в столбце "Время" и вычитанию из фиксированного значения.
Вы можете преобразовать в 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
datetime.timedelta
из вашего объектаtime
, делаяdatetime.timedelta(hours= recording_start_time.hour, minutes = recording_start_time.minutes, ...
) и т. д.