Как сохранить только дату при использовании pandas.to_datetime?
Быстрый ответ
Чтобы исключить время из объектов datetime в Pandas, воспользуйтесь атрибутом .dt.date
:
df['only_date'] = pd.to_datetime(df['column']).dt.date
Данный подход возвратит серию объектов дат без времени.
Если необходимо сохранить формат данных datetime64[ns]
, но установить время на начало дня (полночь), используйте метод .dt.normalize()
:
df['normalized_date'] = pd.to_datetime(df['column']).dt.normalize()
Преобразование в дату с сохранением типа datetime64
Чтобы сохранить формат данных datetime64[ns]
, важный, например, для анализа временных рядов, воспользуйтесь методом .dt.normalize()
. Он делает также временную пометку на начало дня, но при этом сохраняет исходный тип данных:
df['normalized_dates'] = df['dates'].dt.normalize()
Избавление от преобразования в тип object
Применение .dt.date
приводит к изменению типа данных на object
, который не так эффективен по сравнению с datetime64[ns]
. Это может снижать производительность при работе с большими объёмами данных, поэтому нужно быть внимательными:
# Осторожно! Преобразование в тип object
df['date_objects'] = df['dates'].dt.date
Предпочтительнее использовать метод .dt.floor('d')
для округления времени:
df['floored_dates'] = df['dates'].dt.floor('d')
Такой подход позволяет сохранить данные в формате datetime64[ns]
и обеспечивает высокую производительность операций.
Особенности форматирования даты при сохранении в .csv
Для сохранения данных в CSV-файле без указания времени воспользуйтесь параметром date_format
:
df['dates'].to_csv('dates.csv', date_format='%Y-%m-%d')
Преимущества векторизованных операций
Векторизация должна быть предпочтительным методом для масштабных операций над столбцами, так как она намного более эффективна в сравнении с последовательным преобразованием элементов в datetime.date
:
df['dates'] = [d.date() for d in pd.to_datetime(df['column'])]
Суперспособности из strftime
Для форматирования дат используйте strftime
, однако им следует пользоваться с осторожностью и избегать его использования, когда возможно проведение векторизации:
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 📅 |
Сравнимо, как если бы мы перешли из мира тикающих часов в мир календаря, где дни отделяются один от другого.
pandas.to_datetime(['2023-04-01']).normalize() # Путешествие в начало дня без временного дефицита.
Об точности
Когда требуется использовать только даты, применяйте .to_datetime
с указанием необходимой точности, чтобы заодно избавиться от зависимости от часового пояса:
df['precise_date'] = pd.to_datetime(df['datetime_column'], format='%Y-%m-%d')
Часовые пояса: не только для путешественников
Часовые пояса заслуживают особого внимания, так как они могут усложнить работу с датами. Рекомендуется сначала нормализовать дату к UTC, чтобы избежать недоразумений:
df['utc_date'] = pd.to_datetime(df['datetime_column'], utc=True).dt.date
Полезные материалы
- pandas.to_datetime — документация pandas 2.2.0 — официальная документация функции
pandas.to_datetime
- Работа с датами и временем в Python с помощью datetime – Real Python — подробное руководство по работе с датами и временем в Python с использованием
datetime
- datetime — Основные типы даты и времени — документация Python 3.12.2 — документация Python по работе с датой и временем
- python – Преобразование столбца Pandas в DateTime – Stack Overflow — набор способов преобразования datetime в Pandas от сообщества
- pandas.Series.dt — документация pandas 2.2.0 — аксессор
.dt
для работы со свойствами даты и времени в Pandas - Python Pandas DataFrame: загрузка, редактирование, просмотр данных | Shane Lynn — практические примеры работы с DataFrame в Pandas, включающие работу с датами и временем
- Medium — руководство по работе с временными рядами в Pandas