Функция Pandas pd.to_datetime()

Pandas 通用函数Часто используемые функции 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.
errorsStringМетод обработки ошибок: 'raise' (по умолчанию) вызывает исключение; 'coerce' преобразует в NaT; 'ignore' возвращает исходные данные.
dayfirstBooleanЕсли True, день ставится перед месяцем (например, 01/02/2023 означает 2-е число).
utcBooleanЕсли True, возвращает datetime в часовом поясе UTC.
formatStringЗадаёт формат datetime, например '%Y-%m-%d'.
единицаStringЕсли arg является числовым, задаёт единицу измерения: 'D', 's', 'ms', 'us', 'ns'.

Описание возвращаемого значения

  • Возвращаемое значение: Возвращает Series типа datetime64.
  • Эффект: Преобразует входные данные в тип datetime Pandas, что упрощает выполнение операций с датами и временем.

Примеры

Давайте подробно разберём на серии примеров от простого к сложному,pd.to_datetime()его использование.

Пример 1: Базовое использование — преобразование строк в datetime

Примеры

import pandas as pd

# 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

Пояснение к коду:

  1. pd.to_datetime()Он может автоматически распознавать различные распространённые форматы даты и времени.
  2. Даже если входные данные содержат только дату, часть времени по умолчанию равна 00:00:00.
  3. Он может обрабатывать форматы даты с различными разделителями, такими как китайские иероглифы, точки и косые черты.

Пример 2: Обработка различных форматов даты и параметра dayfirst

Для форматов даты в разных регионах можно использоватьdayfirstпараметр илиformatпараметра.

Примеры

import pandas as pd

# 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параметра.

Примеры

import pandas as pd

# 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 pandas as pd
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библиотеку.

Python math 模块Часто используемые функции Pandas

Другие расширения