October 6, 2021

Интеллектуальное преобразование строк в формат даты и времени

Преобразование входных строк в формат даты и времени стоит в основе подготовки данных для ряда моделей машинного обучения. В этой статье рассмотрим инструментарий Pandas, позволяющий решить указанную задачу.

Всю самую сложную работу сделает за вас функция to_datetime. Можно попытаться запустить ее без дополнительных параметров, тогда формат передаваемых строк она определит самостоятельно:

import pandas as pd
ser = pd.Series(['2022-02-01', '13-01-12', '20-01-2012', None])
pd.to_datetime(ser)

Однако, такой способ не очень надежен, так как не совсем понятно как интерпретировать вторую строку (год в начале или в конце?). Поэтому рекомендую применять функцию с параметром format, в котором передавать "пояснительную" строку с описанием формата передачи даты и времени:

pd.to_datetime(ser, format = '%Y-%m-%d', errors='coerce')

Обратите внимание на параметр errors='coerce', который заменяет нераспарсенные даты на NaT. По умолчанию мы бы получили исключение:

Следует отметить, что служебные обозначения для параметра формата можно найти здесь:

Еще интересна комбинация параметров unit и origin, которая позволяет задать единицы времени и дату начала отсчета. По умолчанию, origin=‘unix’, что инициирует отсчет с 1970-01-01. А в параметре unit могут указываться такие единицы как День (D), секунда (s), миллисекунда (ms), микросекунда (us), наносекунда(ns):

pd.to_datetime([1590295805, 1480295805], unit='s')
pd.to_datetime([1, 60, 80], unit='D', origin=pd.Timestamp('2020-01-01'))