Pandas es una potente librería de Python para la manipulación y el análisis de datos. Trabajar con fechas y horas es una tarea común, y a menudo, sus datos pueden contener información de fecha y hora en formato de cadena u otros formatos que no sean de fecha y hora. Este artículo demuestra varias técnicas eficientes para convertir columnas de Pandas DataFrame al tipo de dato datetime, lo que facilita significativamente el análisis y la manipulación de series temporales.
Tabla de contenido:
- Conversión eficiente de datetime con
pd.to_datetime()
- Manejo de formatos complejos con
apply()
- Conversión simultánea de múltiples columnas
- Uso de
astype()
para conversiones simples
1. Conversión eficiente de datetime con pd.to_datetime()
El enfoque más directo y recomendado es utilizar la función pd.to_datetime()
. Esta función es muy versátil y es capaz de manejar una amplia variedad de formatos de fecha y hora.
import pandas as pd
data = {'date_str': ['2024-03-08', '2024-03-09', '2024-03-10']}
df = pd.DataFrame(data)
# Convertir la columna 'date_str' a datetime
df['date'] = pd.to_datetime(df['date_str'])
print(df)
print(df.dtypes)
Este fragmento de código crea un DataFrame con una columna de cadenas de fecha. pd.to_datetime()
infiere automáticamente el formato y convierte las cadenas en objetos datetime. La salida de dtypes
confirma la conversión exitosa. pd.to_datetime()
también maneja formatos con componentes de hora y ofrece manejo de errores a través del parámetro errors
(por ejemplo, ‘coerce’ para reemplazar fechas inválidas con NaT).
2. Manejo de formatos complejos con apply()
El método apply()
proporciona una mayor flexibilidad, particularmente cuando se trata de formatos de fecha intrincados o lógica de análisis personalizada.
import pandas as pd
data = {'date_str': ['Mar 8, 2024', 'Mar 9, 2024', 'Mar 10, 2024']}
df = pd.DataFrame(data)
# Función personalizada para analizar la cadena de fecha
def parse_date(date_str):
return pd.to_datetime(date_str, format='%b %d, %Y')
df['date'] = df['date_str'].apply(parse_date)
print(df)
print(df.dtypes)
Aquí, se define una función personalizada parse_date
para manejar un formato de fecha específico. El método apply()
aplica esta función a cada elemento de la columna ‘date_str’. Este enfoque es beneficioso cuando se trata de formatos de fecha inconsistentes o se requiere un manejo especializado.
3. Conversión simultánea de múltiples columnas
El método apply()
se puede extender para convertir varias columnas a la vez.
import pandas as pd
data = {'date_str': ['Mar 8, 2024', 'Mar 9, 2024', 'Mar 10, 2024'],
'time_str': ['10:00:00', '12:30:00', '14:45:00']}
df = pd.DataFrame(data)
def parse_date_time(row):
return pd.to_datetime(row['date_str'] + ' ' + row['time_str'], format='%b %d, %Y %H:%M:%S')
df['datetime'] = df.apply(parse_date_time, axis=1)
print(df)
print(df.dtypes)
Este ejemplo combina cadenas de fecha y hora de columnas separadas. El argumento axis=1
en apply()
indica la aplicación de la función fila por fila.
4. Uso de astype()
para conversiones simples
El método astype()
ofrece un método de conversión conciso, pero es menos flexible que pd.to_datetime()
. Es más efectivo cuando sus fechas ya están en un formato que Pandas puede interpretar directamente.
import pandas as pd
data = {'date_str': ['2024-03-08', '2024-03-09', '2024-03-10']}
df = pd.DataFrame(data)
df['date'] = pd.to_datetime(df['date_str']) #Primero convierte a objeto datetime usando pd.to_datetime para flexibilidad
df['date'] = df['date'].astype('datetime64[ns]') #Ahora podemos usar astype
print(df)
print(df.dtypes)
Si bien astype
proporciona una conversión directa, pd.to_datetime
generalmente se prefiere debido a su manejo de errores superior y flexibilidad de formato. Tenga en cuenta que es necesaria una conversión preliminar usando pd.to_datetime
antes de aplicar astype
; de lo contrario, se producirá un error.
El método óptimo depende de la complejidad de sus datos y sus necesidades específicas. Para la mayoría de los escenarios, pd.to_datetime()
proporciona el mejor equilibrio entre eficiencia y flexibilidad. Sin embargo, el método apply()
ofrece capacidades de funciones personalizadas cuando es necesario, y astype
es una solución concisa para casos sencillos donde los datos ya están en un formato apropiado.