datetime64[ns] to timestamp unix (секунды)
Есть датафрейм, в котором индекс это объект DatetimeIndex, он же формат даты datetime64[ns]
A B C
'2022-12-14 12:00:00' 1 2 3
'2022-12-14 12:00:01' 5 6 7
Необходимо из этого индекса сделать столбец 'timestamp_s', в котором собственно будет храниться время из индексов в формате timestamp unix секунды.
На ум пришло грубое решение:
df['timestamp_s'] = df.index.astype('int32')
df['timestamp_s'] = df['timestamp_s'].apply(lambda x: (x / 1000000000).__int__())
Собственно, сначала переводим datetime64[ns] в формат int32, ну и затем каждый элемент делим на 10000000, так как после конвертации у нас получились наносекунды. Интересует вопрос, думаю что есть дефолтная функция, которая сделает конвертацию гораздо быстрее, но как она выглядит?
p.s. Данное решение занимает ~53мс, датафрейм состоит из 2млн+ строк и 4 столбцов формата int32
Ответы (1 шт):
Вероятно, много времени отнимает имплицитный цикл apply, который здесь, кстати, не нужен:
df['timestamp_s'] = df.index.view('int64')/(10**9)
Обратите внимание на модификатор .view(), который теперь разработчики pandas рекомендуют использовать в подобных случаях вместо .astype().