Функция Pandas pd.to_datetime()
Часто используемые функции Pandas
pd.to_datetime()это функция в библиотеке Pandas, используемая дляпреобразования данных в тип datetimeОна может преобразовывать данные в различных форматах, таких как строки, метки времени Unix и т. д., в тип datetime64 библиотеки Pandas.
Обработка даты и времени — распространённая задача в анализе данных. После преобразования к типу datetime можно удобно выполнять такие операции, как извлечение даты, арифметика времени и работа с часовыми поясами.
Пояснение термина: to_datetimeЭто означает «преобразовать в datetime», т. е. единообразное преобразование временных данных в различных форматах в стандартные объекты datetime.
Базовый синтаксис и параметры
pd.to_datetime()является функцией верхнего уровня в библиотеке Pandas, используемой для преобразования временных данных в различных форматах в тип datetime.
Формат синтаксиса
pd.to_datetime(arg, errors='raise', dayfirst=False, yearfirst=False, utc=False, format=None, unit='ns')
Описание параметра
| Параметр | Type | Описание |
|---|---|---|
| arg | Целое число, число с плавающей точкой, строка, datetime, список, Series | Данные, которые нужно преобразовать в тип datetime. |
| errors | String | Метод обработки ошибок: 'raise' (по умолчанию) вызывает исключение; 'coerce' преобразует в NaT; 'ignore' возвращает исходные данные. |
| dayfirst | Boolean | Если True, день ставится перед месяцем (например, 01/02/2023 означает 2-е число). |
| utc | Boolean | Если True, возвращает datetime в часовом поясе UTC. |
| format | String | Задаёт формат datetime, например '%Y-%m-%d'. |
| единица | String | Если arg является числовым, задаёт единицу измерения: 'D', 's', 'ms', 'us', 'ns'. |
Описание возвращаемого значения
- Возвращаемое значение: Возвращает Series типа datetime64.
- Эффект: Преобразует входные данные в тип datetime Pandas, что упрощает выполнение операций с датами и временем.
Примеры
Давайте подробно разберём на серии примеров от простого к сложному,pd.to_datetime()его использование.
Пример 1: Базовое использование — преобразование строк в datetime
Примеры
# 1. Создайте Series строк datetime
dates = pd.Series([
'2023-01-01',
'2023-01-02',
'2023-01-03',
'2023-01-04',
'2023-01-05'
])
print("=== Исходная Series (тип:", dates.dtype, ")===")
print(dates)
# 2. Используйте pd.to_datetime() для преобразования в тип datetime
result = pd.to_datetime(dates)
print("\n=== После преобразования pd.to_datetime() (тип:", result.dtype, ")===")
print(result)
# 3. Поддерживает несколько форматов
dates_mixed = pd.Series([
'2023-01-01',
'2023/02/03',
'01.04.2023',
'May 6, 2023'
])
print("\n=== Автоматический разбор нескольких форматов ===)
print(pd.to_datetime(dates_mixed))
# 4. Информация, содержащая время
dates_with_time = pd.Series([
'2023-01-01 12:30:45',
'2023-02-03 08:15:30'
])
result_datetime = pd.to_datetime(dates_with_time)
print("\n=== Информация, содержащая время ===)
print(result_datetime)
Результат выполнения:
=== 原始 Series(类型: object )=== 0 2023-01-01 1 2023-01-02 2 2023-01-03 3 2023-01-04 4 2023-01-05 dtype: object === pd.to_datetime() 转换后(类型: datetime64[ns] )=== 0 2023-01-01 00:00:00 1 2023-01-02 00:00:00 2 2023-01-03 00:00:00 3 2023-01-04 00:00:00 4 2023-01-05 00:00:00 === 多种格式自动解析 === 0 2023-01-01 00:00:00 1 2023-02-03 00:00:00 2 2023-04-01 00:00:00 3 2023-05-06 00:00:00 === 包含时间的信息 === 0 2023-01-01 12:30:45 1 2023-02-03 08:15:30
Пояснение к коду:
pd.to_datetime()Он может автоматически распознавать различные распространённые форматы даты и времени.- Даже если входные данные содержат только дату, часть времени по умолчанию равна 00:00:00.
- Он может обрабатывать форматы даты с различными разделителями, такими как китайские иероглифы, точки и косые черты.
Пример 2: Обработка различных форматов даты и параметра dayfirst
Для форматов даты в разных регионах можно использоватьdayfirstпараметр илиformatпараметра.
Примеры
# 1. Европейский формат даты (месяц/день/год)
europe_dates = pd.Series(['01/02/2023', '02/03/2023', '03/04/2023'])
print("=== Европейский формат даты (01/02/2023 интерпретируется как 2-е) ===")
print("По умолчанию (месяц/день/год):", pd.to_datetime(europe_dates).dt.day.tolist())
print("dayfirst=True:", pd.to_datetime(europe_dates, dayfirst=True).dt.day.tolist())
# 2. Используйте параметр format для указания точного формата
print("\n=== Использование параметра format ===)
result = pd.to_datetime('2023-06-15 14:30:00', format='%Y-%m-%d %H:%M:%S')
print(f"Результат преобразования: {result}")
# 3. Парсинг сложного формата
complex_dates = pd.Series(['December 25, 2023', '15/08/2023', '2023-05-01'])
print("\n=== Автоматический парсинг смешанных форматов ===)
print(pd.to_datetime(complex_dates, dayfirst=True))
Результат выполнения:
=== 欧洲格式日期(01/02/2023 理解为 2 号)=== 默认: [1, 2, 3] dayfirst=True: [2, 3, 4] === 使用 format 参数 === 转换结果: 2023-06-15 14:30:00 === 混合格式自动解析 === 0 2023-12-25 00:00:00 1 2023-08-15 00:00:00 2 2023-05-01 00:00:00
Пояснение к коду:
formatПараметр задаёт точный формат, явно указывая Pandas, как разбирать дату, избегая неоднозначности.- Автоматический парсинг очень мощный, но когда есть неоднозначность (например, при интерпретации 01/02/2023), нужно использовать
dayfirstилиformatпараметр, чтобы указать явно.
Пример 3: Преобразование временных меток Unix в Datetime
Временные метки, экспортированные из баз данных или систем, можно преобразовать с помощьюunitпараметра.
Примеры
# 1. Временная метка Unix (секунды)
timestamps = pd.Series([1672531200, 1672617600, 1672704000])
print("=== Временная метка Unix (секунды) ===")
print(timestamps.values)
# 2. Преобразование в datetime
result = pd.to_datetime(timestamps, unit='s')
print("\n=== После преобразования pd.to_datetime(..., unit='s') ===)
print(result)
# 3. Временная метка Unix (миллисекунды)
timestamps_ms = pd.Series([1672531200000, 1672617600000, 1672704000000])
result_ms = pd.to_datetime(timestamps_ms, unit='ms')
print("\n=== Метка времени в миллисекундах ===)
print(result_ms)
# 4. Преобразование из фиксированного начала отсчёта
print("\n=== Вычислено от 2023-01-01 ===)
days = pd.Series([0, 1, 2, 3, 4])
result_origin = pd.to_datetime(days, origin='2023-01-01', unit='D')
print(result_origin)
Результат выполнения:
=== Unix 时间戳(秒)=== [1672531200 1672617600 1672704000] === pd.to_datetime(..., unit='s') 转换后 === 0 2023-01-01 00:00:00 1 2023-01-02 00:00:00 2 2023-01-03 00:00:00 === 毫秒级时间戳 === 0 2023-01-01 00:00:00 1 2023-01-02 00:00:00 2 2023-01-03 00:00:00 === 从 2023-01-01 开始计算 === 0 2023-01-01 1 2023-01-02 2 2023-01-03 3 2023-01-04 4 2023-01-05
Пояснение к коду:
unit='s'Означает, что единица измерения значения — секунды (метка времени Unix).unit='ms'Означает метку времени в миллисекундах.originПараметр может задавать начальное время, используемое для вычисления относительного времени.
Пример 4: Обработка недопустимых дат с помощью параметра errors
Примеры
import numpy as np
# 1. Series, содержащий недопустимые даты
mixed_dates = pd.Series(['2023-01-01', '2023-02-30', 'invalid', '2023-03-15'])
print("=== Series, содержащий недопустимые даты ===")
print(mixed_dates)
# 2. errors='raise' (по умолчанию) - вызывает исключение
print("\n=== errors='raise' ===")
try:
pd.to_datetime(mixed_dates, errors='raise')
except Exception as e:
print(f"Исключение: {type(e).__name__}")
# 3. errors='coerce' - преобразует недопустимые даты в NaT
print("\n=== errors='coerce' ===")
result = pd.to_datetime(mixed_dates, errors='coerce')
print(result)
# 4. errors='ignore' - оставляет как есть
print("\n=== errors='ignore' ===")
result_ignore = pd.to_datetime(mixed_dates, errors='ignore')
print(result_ignore)
print(f"Тип: {result_ignore.dtype}")
Результат выполнения:
=== 包含无效日期的 Series === 0 2023-01-01 1 2023-02-30 2 invalid 3 2023-03-15 === errors='raise' === 异常: OutOfBoundsDatetime === errors='coerce' === 0 2023-01-01 00:00:00 1 NaT 2 NaT 3 2023-03-15 00:00:00 === errors='ignore' === 0 2023-01-01 1 2023-02-30 2 invalid 3 2023-03-15 dtype: object
Пояснение к коду:
errors='coerce'Преобразует и некорректные даты, и неразбираемые значения в NaT (Not a Time, эквивалент отсутствующего значения).- Это очень полезно при работе с грязными данными, так как сохраняет непрерывность обработки данных.
Примечания
Важное примечание:
- Если значение в данных выходит за пределы диапазона datetime, будет вызвано
OutOfBoundsDatetimeисключение.formatПараметр может явно задавать формат даты. Рекомендуется использовать его при обработке больших объёмов данных для повышения производительности.- Преобразованный объект datetime может использовать
.dtаксессор для расширенных операций с datetime.- Для работы с часовыми поясами требуется установить
pytzбиблиотеку.
Другие расширения