January 28, 2021

Работа с датой и временем в Pandas

Разбор  строковых полей с информацией о дате и времени встречается повсеместно,  соответственно, любой анализ временного ряда не обходится без знания  базовых возможностей по обработке эти данных.

Если имеющаяся в pandas функция pandas.to_datetime()  произведет автоматический разбор строки и трансформирует ее значения в  тип даты, можно считать, что вам повезло, так как вся сложная работа  выполнена за вас. В противном случае строковые данные нужно привести к  одному из распространенных видов представления даты и времени. Например,  выполнив последовательность действий из урока, можно преобразовать столбец дат к виду:

В  последующем для каждого элемента столбца можно вызвать  функцию-обработчик и преобразовать данные к типу numpy.datetime64  следующим образом:

df.loc[df.date_time.notnull(),'date_time'] = df.loc[df.date_time.notnull(),'date_time'].map(lambda str: datetime.strptime(str, '%d %B %H:%M %Y'))
df['date_time'] = df['date_time'].astype(np.datetime64)

Как обсуждалось ранее, посредством метода map мы вызываем для каждого ненулевого элемента столбца 'date_time' функцию, которая преобразует строковое значение в тип даты:

Теперь можно исследовать получившийся столбец. Выведем минимальное и максимальное значения:

Допустим, мы хотим использовать интервалы времени в качестве индикаторных  переменных (принимают значения 0 или 1) в модели машинного обучения.  Тогда мы можем поделить весь временной диапазон на заданное количество  равных интервалов с использованием функции pandas.cut (рассказывалось ранее)  и добавить к анализируемой таблице столбцы каждого отрезка времени,  содержащие только 0 или 1, в зависимости от попадания даты записи в  строке в заданный интервал:

Затем посредством вызова функции pandas.get_dummies  (используем pd – псевдоним pandas) для каждой категории формируется  отдельный столбец с 0 или 1, в зависимости от попадания даты записи в  строке в его интервал. После этого громоздкие названия столбцов  (интервалы дат и времени) приводятся к более компактному виду (правая  граница):

Зачастую  очень удобно внести дату в индекс таблицы, чтобы потом использовать  продвинутые возможности pandas для работы с временными рядами. Например,  вызвав для таблицы df (в качестве примера взята таблица цен на недвижимость в Республике Северная Осетия-Алания) метод set_index получим следующее представление:

df = df.set_index(['date_time'])