El filtrado de datos tabulares es una de las fases que casi siempre estará presente en un proyecto de Ciencia de Datos.
Y usualmente cuando los datos se encuentran en un DataFrame de Pandas, este filtrado se realiza usando técnicas de indexación.
Sin embargo, en ocasiones la indexación no resulta adecuada pues, dependiendo del filtrado que estemos realizando, el código resultante resulta difícil de interpretar.
Así que en este tutorial veremos cómo usar el método «query()» de Pandas para realizar el filtrado de DataFrames, lo que nos permitirá escribir un código más fácil de interpretar y que por tanto será una alternativa al uso convencional de indexación.
Recuerda que este tutorial es exclusivo para suscriptores a la Academia Online. Si estás suscrito podrás acceder al enlace de descarga del código fuente y del set de datos al final del tutorial.
¿Qué es el filtrado de datos en Pandas?
Cuando tenemos un DataFrame en Pandas muchas veces queremos preservar aquellos datos que cumplan con una o múltiples condiciones.
Por ejemplo, si tenemos un registro de ventas diarias durante los últimos 5 meses, y nos interesa por ejemplo analizar aquellos días donde las ventas estuvieron por debajo del promedio, en este caso podemos usar el filtrado.
De hecho, en el curso de Pandas Nivel Básico vemos diferentes técnicas de filtrado de DataFrames basadas en la indexación.
¿Por qué el filtrado por indexación a veces no resulta adecuado?
Entendamos las limitaciones del filtrado por indexación con un sencillo ejemplo.
Comencemos creando un DataFrame de Pandas que contendrá el nombre, la edad y la ciudad de origen de un pequeño grupo de 5 personas:
import pandas as pd
data = {
"nombre": ["Ana", "Luis", "Carla", "Pedro", "Sofía"],
"edad": [23, 35, 19, 42, 29],
"ciudad": ["Madrid", "Bogotá", "Lima", "Madrid", "Quito"]
}
df = pd.DataFrame(data)
df
Al ejecutar el código anterior obtenemos este resultado:
nombre edad ciudad
0 Ana 23 Madrid
1 Luis 35 Bogotá
2 Carla 19 Lima
3 Pedro 42 Madrid
4 Sofía 29 Quito
Y supongamos que queremos preservar sólo aquellas filas donde «edad» supere los 20 años y «ciudad» sea igual a «Madrid».
Si usamos indexación el código sería este:
df[(df["edad"]>20) & (df["ciudad"]=="Madrid")]
Con lo cual obtenemos este resultado:
nombre edad ciudad
0 Ana 23 Madrid
3 Pedro 42 Madrid
Sin embargo, la sintaxis hace que el código sea difícil de escribir y difícil de entender. En cambio, si hacemos uso de «query()» tendríamos una sentencia como esta:
df.query("edad>20 and ciudad=='Madrid'")
El resultado es exactamente el mismo, pero esta segunda sentencia es mucho más fácil de escribir y resulta mucho más fácil de interpretar.
Así que teniendo claras las limitaciones de la indexación, al momento de filtrar un DataFrame en Pandas, veamos los usos básicos y avanzados del método «query()».
Contenido exclusivo para suscriptores
Si eres suscriptor accede en este enlace ó suscríbete a la Academia Online y accede a todo el contenido (lecciones en video, código fuente, sets de datos y descargas) de todos los cursos, proyectos y tutoriales.
Conclusión
Como acabamos de ver, el uso del método query en Pandas es una alternativa muy útil al filtrado convencional usando indexación.
En general, el código requerido para implementar diferentes tipos de filtrado con este método es mucho más limpio que el que obtendríamos con métodos convencionales de indexación.
Aunque una excepción es cuando queremos hacer filtrado por búsqueda de coincidencias. En este caso, la opción de indexación en general requiere un código más fácil de entender.
Recuerda que si eres suscriptor me puedes contactar a través de la Intranet (sección «Soporte») para aclarar las dudas que tengas de este tutorial.
