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 
Последнее обновление
