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:
.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