К сожалению, ответ на этот вопрос для datetime.date
не работает для datetime.time
.
Поэтому я реализовал функцию df.apply()
, которая делает то, что я ожидаю:
def get_ts_timeonly_float(timeonly):
if isinstance(timeonly, datetime.time):
return timeonly.hour * 3600 + timeonly.minute * 60 + timeonly.second
elif isinstance(timeonly, pd.Timedelta):
return timeonly.seconds
fn_get_ts_timeonly_pd_timestamp = lambda row: get_ts_timeonly_float(row.ts_timeonly)
col = df.apply(fn_get_ts_timeonly_pd_timestamp, axis=1)
df = df.assign(ts_timeonly_as_ts=col.values)
Проблема:
Однако это еще не «невероятно быстро». Одна из причин заключается в том, что .apply () попытается внутренне выполнить l oop через итераторы Cython. Но в этом случае лямбда, которую вы передали, не является чем-то, что может быть обработано в Cython, поэтому она называется в Python, что, следовательно, не так быстро.
Это отличный пост в блоге
Так есть ли более быстрый способ конвертировать datetime.time
в некоторое представление int
(например, total_seconds
до начала дня)? Спасибо!