Función Pandas pd.to_datetime()

Pandas 通用函数Funciones comunes de Pandas


pd.to_datetime()es una función de la biblioteca Pandas utilizada paraconvertir datos al tipo fecha y hora. Puede convertir datos en múltiples formatos, como cadenas, marcas de tiempo Unix, etc., al tipo datetime64 de Pandas.

El procesamiento de fechas y horas es una tarea común en el análisis de datos. Después de convertir al tipo datetime, se pueden realizar fácilmente operaciones como extracción de fechas, cálculos de tiempo y manejo de zonas horarias.

Significado de la palabra: to_datetimeSignifica "convertir a fecha y hora", es decir, unificar la conversión de datos de tiempo en varios formatos a objetos datetime estándar.


Sintaxis básica y parámetros

pd.to_datetime()es una función de nivel superior de la biblioteca Pandas, utilizada para convertir datos de tiempo en varios formatos al tipo datetime.

Formato de sintaxis

pd.to_datetime(arg, errors='raise', dayfirst=False, yearfirst=False, utc=False, format=None, unit='ns')

Descripción de parámetros

ParámetroTipoDescripción
argEntero, flotante, cadena, datetime, lista, SeriesDatos a convertir al tipo fecha y hora.
errorsCadenaMétodo de manejo de errores: 'raise' (por defecto) lanza una excepción; 'coerce' convierte a NaT; 'ignore' devuelve los datos originales.
dayfirstBooleanoSi es True, el día se coloca antes del mes (por ejemplo, 01/02/2023 significa el día 2).
utcBooleanoSi es True, devuelve un datetime en la zona horaria UTC.
formatCadenaEspecifica el formato de fecha y hora, por ejemplo, '%Y-%m-%d'.
unitCadenaCuando arg es numérico, especifica la unidad: 'D', 's', 'ms', 'us', 'ns'.

Descripción del valor de retorno

  • Valor de retorno: Devuelve una Serie (Series) de tipo datetime64.
  • Efecto: Convierte los datos de entrada al tipo datetime de Pandas, facilitando operaciones de fecha y hora.

Ejemplos

Vamos a dominar completamente, mediante una serie de ejemplos de simples a complejos,pd.to_datetime()el uso de esta función.

Ejemplo 1: Uso básico - Convertir cadenas a fecha y hora

Ejemplo

import pandas as pd

# 1. Crear una Serie de cadenas de fecha y hora
dates = pd.Series([
    '2023-01-01',
    '2023-01-02',
    '2023-01-03',
    '2023-01-04',
    '2023-01-05'
])

print("=== Serie original (tipo: ", dates.dtype, ")===")
print(dates)

# 2. Usar pd.to_datetime() para convertir al tipo fecha y hora
result = pd.to_datetime(dates)
print("\n"=== Después de pd.to_datetime() (tipo: ", result.dtype, ")===")
print(result)

# 3. Admite múltiples formatos
dates_mixed = pd.Series([
    '2023-01-01',
    '2023/02/03',
    '01.04.2023',
    '6 de mayo de 2023'
])
print("\n"=== Análisis automático de múltiples formatos ===")
print(pd.to_datetime(dates_mixed))

# 4. Incluye información de tiempo
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"=== Incluye información de hora ===")
print(result_datetime)

Resultado de la ejecución:

=== 原始 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

Análisis del código:

  1. pd.to_datetime()Puede reconocer automáticamente múltiples formatos comunes de fecha y hora.
  2. Incluso si la entrada solo contiene la fecha, la parte de tiempo se rellena por defecto con 00:00:00.
  3. Puede manejar formatos de fecha con diferentes separadores, como caracteres chinos, puntos y barras.

Ejemplo 2: Manejo de diferentes formatos de fecha y el parámetro dayfirst

Para formatos de fecha de diferentes regiones, se puede utilizar eldayfirstparámetro dayfirst o elformatparámetro format.

Ejemplo

import pandas as pd

# 1. Fecha en formato europeo (mes/día/año)
europe_dates = pd.Series(['01/02/2023', '02/03/2023', '03/04/2023'])

print("=== Fecha en formato europeo (01/02/2023 se interpreta como el día 2) ===")
print("Predeterminado (mes/día/año):", pd.to_datetime(europe_dates).dt.day.tolist())
print("dayfirst=True:", pd.to_datetime(europe_dates, dayfirst=True).dt.day.tolist())

# 2. Usar el parámetro format para especificar un formato concreto
print("\n"=== Usando el parámetro format ===")
result = pd.to_datetime('2023-06-15 14:30:00', format='%Y-%m-%d %H:%M:%S')
print(f"Resultado de la conversión: {result}")

# 3. Análisis de formatos complejos
complex_dates = pd.Series(['25 de diciembre de 2023', '15/08/2023', '2023-05-01'])
print("\n"=== Análisis automático de formatos mixtos ===")
print(pd.to_datetime(complex_dates, dayfirst=True))

Resultado de la ejecución:

=== 欧洲格式日期(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

Análisis del código:

  • formatEl parámetro que especifica el formato concreto indica claramente a Pandas cómo analizar la fecha, evitando ambigüedades.
  • La capacidad de análisis automático es muy potente, pero cuando hay ambigüedad (como interpretar 01/02/2023), se necesita usardayfirstoformatel parámetro dayfirst para especificarlo explícitamente.

Ejemplo 3: Convertir marcas de tiempo Unix a fecha y hora

Las marcas de tiempo exportadas de bases de datos o sistemas se pueden convertir usando elunitparámetro unit.

Ejemplo

import pandas as pd

# 1. Marca de tiempo Unix (segundos)
timestamps = pd.Series([1672531200, 1672617600, 1672704000])

print("=== Marca de tiempo Unix (segundos) ===")
print(timestamps.values)

# 2. Convertir a fecha y hora
result = pd.to_datetime(timestamps, unit='s')
print("\n"=== Después de pd.to_datetime(..., unit='s') ===")
print(result)

# 3. Marca de tiempo Unix (milisegundos)
timestamps_ms = pd.Series([1672531200000, 1672617600000, 1672704000000])
result_ms = pd.to_datetime(timestamps_ms, unit='ms')
print("\n"=== Marca de tiempo en milisegundos ===")
print(result_ms)

# 4. Convertir desde un origen fijo
print("\n"=== Calculado desde 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)

Resultado de la ejecución:

=== 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

Análisis del código:

  • unit='s'Indica que la unidad del valor numérico son segundos (marca de tiempo Unix).
  • unit='ms'Representa la marca de tiempo en milisegundos.
  • originEl parámetro origin puede especificar el tiempo de inicio para calcular tiempos relativos.

Ejemplo 4: El parámetro errors para manejar fechas no válidas

Ejemplo

import pandas as pd
import numpy as np

# 1. Serie con fechas no válidas
mixed_dates = pd.Series(['2023-01-01', '2023-02-30', 'invalid', '2023-03-15'])

print("=== Serie con fechas no válidas ===")
print(mixed_dates)

# 2. errors='raise' (por defecto) - Lanza una excepción
print("\n=== errors='raise' ===")
try:
    pd.to_datetime(mixed_dates, errors='raise')
except Exception as e:
    print(f"Excepción: {type(e).__name__}")

# 3. errors='coerce' - Convierte fechas no válidas a NaT
print("\n=== errors='coerce' ===")
result = pd.to_datetime(mixed_dates, errors='coerce')
print(result)

# 4. errors='ignore' - Mantiene el valor original
print("\n=== errors='ignore' ===")
result_ignore = pd.to_datetime(mixed_dates, errors='ignore')
print(result_ignore)
print(f"Tipo: {result_ignore.dtype}")

Resultado de la ejecución:

=== 包含无效日期的 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

Análisis del código:

  • errors='coerce'Convierte tanto las fechas no válidas como los valores que no se pueden analizar en NaT (Not a Time, equivalente a un valor faltante).
  • Esto es muy útil al tratar con datos sucios, ya que mantiene la continuidad del procesamiento de datos.

Notas importantes

Aviso importante:

  • Si hay valores en los datos que exceden el rango de datetime, se lanzaráOutOfBoundsDatetimeuna excepción.
  • formatEl parámetro format puede especificar explícitamente el formato de fecha; se recomienda usarlo al procesar grandes volúmenes de datos para mejorar el rendimiento.
  • El objeto datetime convertido puede usar el.dtaccessor .dt para realizar diversas operaciones de fecha y hora.
  • Para el manejo de zonas horarias es necesario instalarpytzla biblioteca pytz.

Python math 模块Funciones comunes de Pandas

Otras extensiones