pandas конвертировать из datetime.time в целое время - PullRequest
0 голосов
/ 25 апреля 2020

К сожалению, ответ на этот вопрос для 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 до начала дня)? Спасибо!

...