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