Pandas to_datetime: Преобразование строки Pandas в дату и время

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

К концу этого учебного пособия вы узнаете:

  • Как использовать функцию Pandas to_datetime для преобразования столбца в дату и время

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

  • Преобразование целых чисел секунд и дат в дату и время в Pandas

Оглавление

Понимание функции Pandas to_datetime

Давайте начнем с изучения функции Pandas to_datetime(), которая позволяет передать серию Pandas для преобразования ее в дату и время. Функция предоставляет множество универсальных параметров, которые позволяют настроить поведение.

Давайте взглянем на эти параметры:

# Понимание функции Pandas to_datetime()
pd.to_datetime(
    arg,                            # Столбец для преобразования
    errors='raise',                 # Как обрабатывать ошибки
    dayfirst=False,                 # Указывает, что дни идут первыми
    yearfirst=False,                # Указывает, что годы идут первыми
    utc=None,                       # Указывает, как обрабатывать часовой пояс UTC
    format=None,                    # Формат strftime для разбора
    exact=True,                     # Указывает, нужно ли искать точное совпадение
    unit=None,                      # Единица измерения, если используется целочисленный временной штамп
    infer_datetime_format=False,    # Указывает, нужно ли определять формат автоматически
    origin='unix',                  # Определяет эталонную дату
    cache=True                      # Указывает, использовать ли кэш для ускорения работы с одинаковыми датами
    )     

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

Используйте Pandas to_datetime для преобразования столбца в дату и время

Давайте начнем с простого преобразования строкового столбца в дату и время. Мы можем загрузить Pandas DataFrame ниже и вывести его типы данных с помощью метода info():

import pandas as pd

df = pd.DataFrame(['2022-04-01',
'2022-04-02', '2022-04-03', '2022-04-04', '2022-04-05'], columns=['Date'])
print(df.info())

# Возвращает:
# <class 'pandas.core.frame.DataFrame'>
# RangeIndex: 5 записей, от 0 до 4
# Столбцы данных (всего 1 столбец):
#  #   Столбец  Количество ненулевых значений  Тип данных 
# ---  ------  ------------------------------  ---------- 
#  0   Date    5 ненулевых                    object
# типы данных: object(1)
# используемая память: 168.0+ байт
# None

Хотя данные выглядят как даты, на самом деле они отформатированы как строки. Давайте посмотрим, как мы можем использовать функцию Pandas to_datetime для преобразования строки в дату и время.

# Преобразование столбца в тип данных "Дата и время" в Pandas
import pandas as pd

df = pd.DataFrame(['2022-04-01',
'2022-04-02', '2022-04-03', '2022-04-04', '2022-04-05'], columns=['Date'])
df['Date'] = pd.to_datetime(df['Date'])
print(df.info())

# Возвращает:
# <class 'pandas.core.frame.DataFrame'>
# RangeIndex: 5 записей, от 0 до 4
# Столбцы данных (всего 1 столбец):
#  #   Столбец  Количество ненулевых значений  Тип данных       
# ---  ------  ------------------------------  ----------       
#  0   Date    5 ненулевых                    datetime64[ns]
# типы данных: datetime64 
# используемая память: 168.0 байт
# None

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

Укажите форматы даты и времени в Pandas to_datetime

Часто бывает, что вы получаете столбец с датами в формате, который Pandas не может сразу определить. В таких случаях вы можете использовать параметр format=, чтобы указать конкретную строку формата. Эти строки следуют соглашениям strftime, которые распространены во многих языках программирования.

Загрузим DataFrame с необычной строкой форматирования:

# Загрузка странного формата даты
import pandas as pd

df = pd.DataFrame(['2022-04-*-01', '2022-04-*-02', '2022-04-*-03', '2022-04-*-04', '2022-04-*-05'], columns=['Date'])
print(df)

# Возвращает:
#            Date
# 0  2022-04-*-01
# 1  2022-04-*-02
# 2  2022-04-*-03
# 3  2022-04-*-04
# 4  2022-04-*-05

Давайте использовать параметр format=, чтобы указать пользовательский формат:

# Преобразование столбца в тип данных "Дата и время" в Pandas
import pandas as pd

df = pd.DataFrame(['2022-04-*-01', '2022-04-*-02', '2022-04-*-03', '2022-04-*-04', '2022-04-*-05'], columns=['Date'])
df['Date'] = pd.to_datetime(df['Date'], format='%Y-%m-*-%d')

print(df)

# Возвращает:
#         Date
# 0 2022-04-01
# 1 2022-04-02
# 2 2022-04-03
# 3 2022-04-04
# 4 2022-04-05

Мы видим на примере выше, что задав пользовательскую строку формата, Pandas может правильно определить формат даты.

Преобразование целых дней Unix в DateTime в Pandas

Еще одно мощное преобразование, которое предоставляет Pandas, - это преобразование целых чисел в Unix-дни. Это можно сделать, передав серию целых чисел в объект времени. Для этого необходимо указать параметр unit=, чтобы указать дни, что означает, что целые числа представляют собой дни от заданного начала.

По умолчанию Pandas будет использовать 'unix' origin, который представляет собой 1 января 1970 года в 00:00:00 UTC. Посмотрим, как мы можем преобразовать столбец целых чисел в объект даты и времени:

# Преобразование целого числа в дату и время в Pandas
import pandas as pd

df = pd.DataFrame([12345, 23453, 12324, 34534, 12313], columns=['Дата'])
df['Дата'] = pd.to_datetime(df['Дата'], unit='D')

print(df)

# Возвращает:
#         Дата
# 0 2003-10-20
# 1 2034-03-19
# 2 2003-09-29
# 3 2064-07-20
# 4 2003-09-18

Поскольку Pandas использует 'unix' в качестве значения по умолчанию для origin=, нам не нужно было указывать это.

Преобразование целых секунд в DateTime в Pandas

В ситуациях, когда необходимо преобразовать значения целых чисел, представляющих секунды, это работает так же, как в приведенном выше примере, за исключением того, что необходимо указать unit='s' в качестве параметра:

# Преобразование столбца целых чисел в дату и время в Pandas
import pandas as pd

df = pd.DataFrame([12345, 23453, 12324, 34534, 12313], columns=['Дата'])
df['Дата'] = pd.to_datetime(df['Дата'], unit='s')

print(df)

# Возвращает:
#                  Дата
# 0 1970-01-01 03:25:45
# 1 1970-01-01 06:30:53
# 2 1970-01-01 03:25:24
# 3 1970-01-01 09:35:34
# 4 1970-01-01 03:25:13

В последнем разделе вы узнаете, как конвертировать несколько столбцов Pandas в datetime.

Преобразование нескольких столбцов Pandas в DateTime

Чтобы преобразовать несколько столбцов в datetime в Pandas, можно использовать сочетание функций Pandas apply и to_datetime. Метод .apply() применяется к разделу нескольких столбцов, а функция to_datetime() внутри него.

Давайте посмотрим, как мы можем сделать это с помощью Pandas:

# Преобразование нескольких столбцов в дату и время в Pandas
import pandas as pd

df = pd.DataFrame(
    [['2022-04-01', '2022-05-01'],
    ['2022-04-02', '2022-05-02'],
    ['2022-04-03', '2022-05-03'],
    ['2022-04-04', '2022-05-04'],
    ['2022-04-05', '2022-05-05']], columns=['Дата1', 'Дата2'])

df[['Дата1', 'Дата2']] = df[['Дата1', 'Дата2']].apply(pd.to_datetime)

print(df)

# Возвращает:
#        Дата1      Дата2
# 0 2022-04-01 2022-05-01
# 1 2022-04-02 2022-05-02
# 2 2022-04-03 2022-05-03
# 3 2022-04-04 2022-05-04
# 4 2022-04-05 2022-05-05

В приведенном выше примере функция pd.to_datetime была передана методу .apply(), чтобы преобразовать несколько столбцов в формат даты и времени.

Заключение

В этом уроке вы узнали, как использовать функцию Pandas to_datetime для преобразования столбца в тип данных datetime. Вы узнали, как делать это с использованием строк и целых чисел. Вы также узнали, как преобразовать несколько столбцов в тип данных datetime с помощью метода .apply()

Дополнительные ресурсы

Чтобы узнать больше о связанных темах, ознакомьтесь с уроками ниже:

  • DateTime в Pandas и Python

  • Части даты и времени Pandas (месяц, год и т. д.)

  • Преобразование даты в строку в Python: объяснение strftime в Python

  • Pandas: добавление дней в столбец даты

Last updated