Función Pandas pd.to_datetime()
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ámetro | Tipo | Descripción |
|---|---|---|
| arg | Entero, flotante, cadena, datetime, lista, Series | Datos a convertir al tipo fecha y hora. |
| errors | Cadena | Método de manejo de errores: 'raise' (por defecto) lanza una excepción; 'coerce' convierte a NaT; 'ignore' devuelve los datos originales. |
| dayfirst | Booleano | Si es True, el día se coloca antes del mes (por ejemplo, 01/02/2023 significa el día 2). |
| utc | Booleano | Si es True, devuelve un datetime en la zona horaria UTC. |
| format | Cadena | Especifica el formato de fecha y hora, por ejemplo, '%Y-%m-%d'. |
| unit | Cadena | Cuando 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
# 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:
pd.to_datetime()Puede reconocer automáticamente múltiples formatos comunes de fecha y hora.- Incluso si la entrada solo contiene la fecha, la parte de tiempo se rellena por defecto con 00:00:00.
- 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
# 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 usar
dayfirstoformatel 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
# 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 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 instalar
pytzla biblioteca pytz.
Otras extensiones
Funciones comunes de Pandas