Filtrar eficientemente DataFrames de Pandas basándose en rangos de fechas es una habilidad crucial en el análisis de datos. Pandas ofrece varios métodos para lograr esto, cada uno con sus fortalezas y debilidades. Este artículo explora cuatro enfoques populares, comparando su sintaxis, eficiencia y casos de uso.
Tabla de Contenido
- Filtrando con Enmascaramiento Booleano
- Usando el método
.query()
- Empleando el método
.isin()
- Aprovechando el método
.between()
Filtrando con Enmascaramiento Booleano
El enmascaramiento booleano ofrece el enfoque más fundamental y flexible. Crea una matriz booleana (máscara) que filtra las filas basándose en condiciones especificadas. Este método es altamente adaptable a escenarios complejos.
import pandas as pd
data = {'Fecha': pd.to_datetime(['2023-10-26', '2023-11-15', '2023-12-01', '2024-01-10', '2024-02-20']),
'Valor': [10, 20, 30, 40, 50]}
df = pd.DataFrame(data)
fecha_inicio = pd.to_datetime('2023-11-01')
fecha_fin = pd.to_datetime('2024-01-01')
mascara = (df['Fecha'] >= fecha_inicio) & (df['Fecha'] <= fecha_fin)
df_filtrado = df[mascara] #Más eficiente que df.loc[mascara]
print(df_filtrado)
Usando el método .query()
El método .query()
proporciona una alternativa más legible y concisa para filtrar. Es particularmente beneficioso para condiciones complejas.
fecha_inicio = '2023-11-01'
fecha_fin = '2024-01-01'
df_filtrado = df.query('@fecha_inicio <= Fecha <= @fecha_fin')
print(df_filtrado)
Empleando el método .isin()
El método .isin()
es adecuado cuando necesitas seleccionar filas basándote en una lista de fechas específicas, en lugar de un rango continuo. Es menos eficiente para rangos continuos grandes.
fechas_a_incluir = pd.to_datetime(['2023-11-15', '2023-12-01'])
df_filtrado = df[df['Fecha'].isin(fechas_a_incluir)]
print(df_filtrado)
Aprovechando el método .between()
El método .between()
ofrece un enfoque simplificado para seleccionar filas dentro de un rango de fechas continuo. Es eficiente y fácil de leer.
fecha_inicio = pd.to_datetime('2023-11-01')
fecha_fin = pd.to_datetime('2024-01-01')
df_filtrado = df[df['Fecha'].between(fecha_inicio, fecha_fin, inclusive='both')] #argumento inclusive añadido para claridad
print(df_filtrado)
En resumen, Pandas ofrece diversos métodos para el filtrado basado en fechas. La opción óptima depende de tus necesidades específicas y estilo de codificación. El enmascaramiento booleano proporciona la máxima flexibilidad, .query()
mejora la legibilidad, y .between()
simplifica la selección de rangos continuos. Recuerda asegurarte de que tu columna de fecha sea de tipo datetime64
para un rendimiento óptimo.