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

В этом руководстве вы научитесь использовать Pandas для извлечения частей из столбца с датой и временем, таких как: дата, год и месяц. Pandas предоставляет несколько простых способов извлечения частей из объекта datetime, включая использование .dt аксессора.

К концу этого руководства вы узнаете, как работает аксессор dt и как использовать функцию normalize для преобразования столбца в дату с сохранением типа данных datetime. Вы также научитесь проверять типы данных других столбцов и получите общее представление о распространенных частях даты, которые вы можете захотеть преобразовать. Вы также можете просто использовать функцию Python .strftime(), но всегда полезно иметь несколько способов решения проблем.

Краткий ответ: Используйте df['date_column'].dt.date для извлечения даты из Pandas Datetime

# Извлечение даты из столбца с датами и временем в Pandas

df['Date'] = df['DateTime'].dt.date

Оглавление

Что такое Pandas Datetime dt Accessor

При работе с датами и временем в Pandas мы можем использовать аксессор .dt для доступа к различным атрибутам из серии Pandas. Это позволяет извлекать различные части из объекта datetime, такие как месяцы, дата и другое.

Аксессор работает с колонками типа datetime64[ns] и позволяет нам получить доступ к большим объемам данных. При применении аксессора к серии, возвращаемые значения являются серией с теми же индексами, что и у исходной серии. Это позволяет легко извлекать datetime-подобные значения для целого столбца. Более того, мы можем легко фильтровать наш датафрейм на основе этих значений.

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

Распространенные методы доступа к дате и времени для извлечения в Pandas

Следующая таблица предоставляет обзор некоторых из наиболее распространенных dt-акцессоров, которые вы можете использовать в Pandas:

Pandas dt accessor
Used to access

.week

Номер недели

.year

Значение года, возвращаемое как целое число

.date

Дата без значений времени

.day

День месяца, возвращается как значение от 1 до 31.

.month

Месяц года, возвращается как значение от 1 до 12.

.weekday

День недели возвращается как значение, где понедельник=0, а воскресенье=6.

.day_name()

Название дня недели возвращается в виде строки

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

Загрузка образца Pandas Dataframe

Чтобы следовать этому руководству, я предоставил пример DataFrame Pandas. Не стесняйтесь скопировать код ниже в свой любимый редактор кода. Если вы хотите использовать свой собственный набор данных, ваши результаты, конечно, будут отличаться.

# Загрузка образцового Pandas DataFrame

import pandas as pd

df = pd.DataFrame.from_dict({
    'DateTime': ['2022-01-01 15:34:21', '2022-02-03 10:13:45', '2022-03-04 12:12:45', '2022-04-03 14:45:23', '2022-05-27 18:23:45'],
    'Name': ['Nik', 'Kate', 'Lou', 'Samrat', 'Jim'],
    'Age': [33, 32, 45, 37, 23]
})
df['DateTime'] = pd.to_datetime(df['DateTime'])

print(df)

# Возвращает:
#              DateTime    Name  Age
# 0 2022-01-01 15:34:21     Nik   33
# 1 2022-02-03 10:13:45    Kate   32
# 2 2022-03-04 12:12:45     Lou   45
# 3 2022-04-03 14:45:23  Samrat   37
# 4 2022-05-27 18:23:45     Jim   23

Мы можем видеть, что у нас есть три столбца, один из которых содержит значения даты и времени. Мы можем проверить тип этого столбца, используя свойство .dtype:

# Проверка типа данных столбца DateTime

import pandas as pd

df = pd.DataFrame.from_dict({
    'DateTime': ['2022-01-01 15:34:21', '2022-02-03 10:13:45', '2022-03-04 12:12:45', '2022-04-03 14:45:23', '2022-05-27 18:23:45'],
    'Name': ['Nik', 'Kate', 'Lou', 'Samrat', 'Jim'],
    'Age': [33, 32, 45, 37, 23]
})
df['DateTime'] = pd.to_datetime(df['DateTime'])

print(df['DateTime'].dtype)

# Возвращает: datetime64[ns]

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

Извлечь дату из столбца Pandas Datetime

Во многих случаях вы захотите извлечь только дату из столбца с типом datetime. Функция .dt.date делает это очень просто и позволяет извлечь только дату из столбца.

Давайте посмотрим, как это выглядит:

# Извлечение даты из столбца с датами и временем в Pandas

import pandas as pd

df = pd.DataFrame.from_dict({
    'DateTime': ['2022-01-01 15:34:21', '2022-02-03 10:13:45', '2022-03-04 12:12:45', '2022-04-03 14:45:23', '2022-05-27 18:23:45'],
    'Name': ['Nik', 'Kate', 'Lou', 'Samrat', 'Jim'],
    'Age': [33, 32, 45, 37, 23]
})
df['DateTime'] = pd.to_datetime(df['DateTime'])

df['Date'] = df['DateTime'].dt.date

print(df)

# Возвращает:
#              DateTime    Name  Age        Date
# 0 2022-01-01 15:34:21     Nik   33  2022-01-01
# 1 2022-02-03 10:13:45    Kate   32  2022-02-03
# 2 2022-03-04 12:12:45     Lou   45  2022-03-04
# 3 2022-04-03 14:45:23  Samrat   37  2022-04-03
# 4 2022-05-27 18:23:45     Jim   23  2022-05-27

Мы можем видеть, как легко было извлечь только дату из столбца datetime

Важно отметить, что возвращаемая дата на самом деле является типом данных object. Мы можем подтвердить это, проверив тип данных столбца:

# Проверка типа данных столбца Date

import pandas as pd

df = pd.DataFrame.from_dict({
    'DateTime': ['2022-01-01 15:34:21', '2022-02-03 10:13:45', '2022-03-04 12:12:45', '2022-04-03 14:45:23', '2022-05-27 18:23:45'],
    'Name': ['Nik', 'Kate', 'Lou', 'Samrat', 'Jim'],
    'Age': [33, 32, 45, 37, 23]
})
df['DateTime'] = pd.to_datetime(df['DateTime'])

df['Date'] = df['DateTime'].dt.date

print(df['Date'].dtype)

# Возвращает: object

Это может подойти или не подойти для ваших случаев использования. Хотя вы можете преобразовать объект даты обратно в дату, мы действительно можем сохранить тип данных напрямую, используя функцию dt.normalize().

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

Чтобы сохранить тип данных столбца при извлечении даты из столбца Pandas, можно использовать функцию .dt.normalize(). Эта функция берет объект даты и времени и нормализует время до полуночи. Это полезный метод, который позволяет сохранять тип данных, когда информация о времени не важна.

Давайте посмотрим, как с помощью этого метода извлечь дату из столбца с датой

# Извлечение даты из столбца с датами и временем в Pandas

import pandas as pd

df = pd.DataFrame.from_dict({
    'DateTime': ['2022-01-01 15:34:21', '2022-02-03 10:13:45', '2022-03-04 12:12:45', '2022-04-03 14:45:23', '2022-05-27 18:23:45'],
    'Name': ['Nik', 'Kate', 'Lou', 'Samrat', 'Jim'],
    'Age': [33, 32, 45, 37, 23]
})
df['DateTime'] = pd.to_datetime(df['DateTime'])

df['Date'] = df['DateTime'].dt.normalize()

print(df)

# Возвращает:
#              DateTime    Name  Age       Date
# 0 2022-01-01 15:34:21     Nik   33  2022-01-01
# 1 2022-02-03 10:13:45    Kate   32  2022-02-03
# 2 2022-03-04 12:12:45     Lou   45  2022-03-04
# 3 2022-04-03 14:45:23  Samrat   37  2022-04-03
# 4 2022-05-27 18:23:45     Jim   23  2022-05-27

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

# Извлечение даты из столбца с датами и временем в Pandas

import pandas as pd

df = pd.DataFrame.from_dict({
    'DateTime': ['2022-01-01 15:34:21', '2022-02-03 10:13:45', '2022-03-04 12:12:45', '2022-04-03 14:45:23', '2022-05-27 18:23:45'],
    'Name': ['Nik', 'Kate', 'Lou', 'Samrat', 'Jim'],
    'Age': [33, 32, 45, 37, 23]
})
df['DateTime'] = pd.to_datetime(df['DateTime'])

df['Date'] = df['DateTime'].dt.normalize()

print(df['Date'].dtype)

# Возвращает: datetime64[ns]

Мы видим, что при использовании функции .dt.normalize() полученный тип данных не является object, а остается как datetime64[ns]

В следующем разделе вы узнаете, как использовать аксессор .dt для доступа к различным частям объекта даты и времени.

Извлечение частей даты из столбца Pandas Datetime

В этом разделе вы узнаете, как с помощью Pandas извлекать различные части даты из столбца с датой и временем. Существует множество различных опций, которые можно получить из столбца с датой и временем.

Извлечение месяца из столбца даты и времени Pandas

Поскольку месяцы можно представить разными способами, нам следует изучить, как их лучше всего извлекать.

Мы можем использовать

  • .month вернет месяц в виде числа от 1 до 12

  • .month_name() вернет название месяца в зависимости от локали, позволяя использовать другую локаль.

  • .month_name().str[:3] вернет сокращенную версию названия месяца.

Давайте посмотрим, как это:

# Извлечение номера месяца и его названия из столбца с датами и временем в Pandas

import pandas as pd

df = pd.DataFrame.from_dict({
    'DateTime': ['2022-01-01 15:34:21', '2022-02-03 10:13:45', '2022-03-04 12:12:45', '2022-04-03 14:45:23', '2022-05-27 18:23:45'],
    'Name': ['Nik', 'Kate', 'Lou', 'Samrat', 'Jim'],
    'Age': [33, 32, 45, 37, 23]
})
df['DateTime'] = pd.to_datetime(df['DateTime'])

df['MonthNum'] = df['DateTime'].dt.month
df['MonthName'] = df['DateTime'].dt.month_name()
df['MonthNameShort'] = df['DateTime'].dt.month_name().str[:3]

print(df)

# Возвращает:
#              DateTime    Name  Age  MonthNum MonthName MonthNameShort
# 0 2022-01-01 15:34:21     Nik   33         1   January            Jan
# 1 2022-02-03 10:13:45    Kate   32         2  February            Feb
# 2 2022-03-04 12:12:45     Lou   45         3     March            Mar
# 3 2022-04-03 14:45:23  Samrat   37         4     April            Apr
# 4 2022-05-27 18:23:45     Jim   23         5       May            May

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

Извлечь день недели из столбца даты и времени Pandas

Существует множество различных способов представления дней недели. Например, их можно представить в виде числа – но даже это можно сделать по-разному. В противном случае их можно представить в виде строки с названием дня недели. Наконец, их можно представить в виде номера дня в месяце или в году.

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

  • .weekday возвращает номер дня недели, начиная с 0 для понедельника

  • day_name() возвращает название дня недели на основе указанной локали.

  • .day возвращает количество дней, прошедших с начала месяца.

  • .dayofyear возвращает количество дней от начала года до данного дня.

Давайте посмотрим, как мы можем использовать это для извлечения информации.

# Извлечение дня недели, его полного названия и сокращенного варианта, а также номера дня месяца и года из столбца с датами и временем в Pandas

import pandas as pd

df = pd.DataFrame.from_dict({
    'DateTime': ['2022-01-01 15:34:21', '2022-02-03 10:13:45', '2022-03-04 12:12:45', '2022-04-03 14:45:23', '2022-05-27 18:23:45'],
    'Name': ['Nik', 'Kate', 'Lou', 'Samrat', 'Jim'],
    'Age': [33, 32, 45, 37, 23]
})
df['DateTime'] = pd.to_datetime(df['DateTime'])

df['Weekday'] = df['DateTime'].dt.weekday
df['Name'] = df['DateTime'].dt.day_name()
df['NameShort'] = df['DateTime'].dt.day_name().str[:3]
df['DayOfMonth'] = df['DateTime'].dt.day
df['DayOfYear'] = df['DateTime'].dt.dayofyear

print(df)

# Возвращает:
#              DateTime      Name  Age  Weekday NameShort  DayOfMonth  DayOfYear
# 0 2022-01-01 15:34:21  Saturday   33        5       Sat           1          1
# 1 2022-02-03 10:13:45  Thursday   32        3       Thu           3         34
# 2 2022-03-04 12:12:45    Friday   45        4       Fri           4         63
# 3 2022-04-03 14:45:23    Sunday   37        6       Sun           3         93
# 4 2022-05-27 18:23:45    Friday   23        4       Fri          27        147

Заключение

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

Чтобы узнать больше о доступе dt в Pandas, ознакомьтесь с официальной документацией здесь.

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

Чтобы изучить связанные темы, ознакомьтесь с этими учебными пособиями:

  • Создание диапазонов дат с помощью Pandas

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

  • Преобразование строки Python в дату: функция Python strptime

Last updated