Как сохранить только дату при использовании pandas.to_datetime?

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Чтобы исключить время из объектов datetime в Pandas, воспользуйтесь атрибутом .dt.date:

Python
Скопировать код
df['only_date'] = pd.to_datetime(df['column']).dt.date

Данный подход возвратит серию объектов дат без времени.

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

Python
Скопировать код
df['normalized_date'] = pd.to_datetime(df['column']).dt.normalize()
Кинга Идем в IT: пошаговый план для смены профессии

Преобразование в дату с сохранением типа datetime64

Чтобы сохранить формат данных datetime64[ns], важный, например, для анализа временных рядов, воспользуйтесь методом .dt.normalize(). Он делает также временную пометку на начало дня, но при этом сохраняет исходный тип данных:

Python
Скопировать код
df['normalized_dates'] = df['dates'].dt.normalize()

Избавление от преобразования в тип object

Применение .dt.date приводит к изменению типа данных на object, который не так эффективен по сравнению с datetime64[ns]. Это может снижать производительность при работе с большими объёмами данных, поэтому нужно быть внимательными:

Python
Скопировать код
# Осторожно! Преобразование в тип object
df['date_objects'] = df['dates'].dt.date

Предпочтительнее использовать метод .dt.floor('d') для округления времени:

Python
Скопировать код
df['floored_dates'] = df['dates'].dt.floor('d')

Такой подход позволяет сохранить данные в формате datetime64[ns] и обеспечивает высокую производительность операций.

Особенности форматирования даты при сохранении в .csv

Для сохранения данных в CSV-файле без указания времени воспользуйтесь параметром date_format:

Python
Скопировать код
df['dates'].to_csv('dates.csv', date_format='%Y-%m-%d')

Преимущества векторизованных операций

Векторизация должна быть предпочтительным методом для масштабных операций над столбцами, так как она намного более эффективна в сравнении с последовательным преобразованием элементов в datetime.date:

Python
Скопировать код
df['dates'] = [d.date() for d in pd.to_datetime(df['column'])]

Суперспособности из strftime

Для форматирования дат используйте strftime, однако им следует пользоваться с осторожностью и избегать его использования, когда возможно проведение векторизации:

Python
Скопировать код
df['formatted_dates'] = df['dates'].dt.strftime('%Y-%m-%d')

Обновления pandas

Библиотека pandas постоянно обновляется, в частности в отношении работы с датами и временем. В частности, начиная с версии pandas 0.15.0, аксессор .dt значительно улучшил свои возможности.

Визуализация

Ниже приведён пример того, как мы превращаем объект datetime в строгое представление даты с помощью pandas.to_datetime:

Объект DateTimeОбъект Даты
2023-04-01 15:30:00 ⏰2023-04-01 📅
2023-05-15 08:45:00 ⏰2023-05-15 📅
2023-08-22 22:10:00 ⏰2023-08-22 📅

Сравнимо, как если бы мы перешли из мира тикающих часов в мир календаря, где дни отделяются один от другого.

Python
Скопировать код
pandas.to_datetime(['2023-04-01']).normalize() # Путешествие в начало дня без временного дефицита.

Об точности

Когда требуется использовать только даты, применяйте .to_datetime с указанием необходимой точности, чтобы заодно избавиться от зависимости от часового пояса:

Python
Скопировать код
df['precise_date'] = pd.to_datetime(df['datetime_column'], format='%Y-%m-%d')

Часовые пояса: не только для путешественников

Часовые пояса заслуживают особого внимания, так как они могут усложнить работу с датами. Рекомендуется сначала нормализовать дату к UTC, чтобы избежать недоразумений:

Python
Скопировать код
df['utc_date'] = pd.to_datetime(df['datetime_column'], utc=True).dt.date

Полезные материалы

  1. pandas.to_datetime — документация pandas 2.2.0официальная документация функции pandas.to_datetime
  2. Работа с датами и временем в Python с помощью datetime – Real Pythonподробное руководство по работе с датами и временем в Python с использованием datetime
  3. datetime — Основные типы даты и времени — документация Python 3.12.2 — документация Python по работе с датой и временем
  4. python – Преобразование столбца Pandas в DateTime – Stack Overflow — набор способов преобразования datetime в Pandas от сообщества
  5. pandas.Series.dt — документация pandas 2.2.0 — аксессор .dt для работы со свойствами даты и времени в Pandas
  6. Python Pandas DataFrame: загрузка, редактирование, просмотр данных | Shane Lynnпрактические примеры работы с DataFrame в Pandas, включающие работу с датами и временем
  7. Medium — руководство по работе с временными рядами в Pandas