Logotipo de Zephyrnet

Cinco formas de hacer filtrado condicional en Pandas

Fecha:

Cinco formas de hacer filtrado condicional en Pandas
Imagen por editor
 

Cuando comencé mi viaje hacia la ciencia de datos, aprendí R como mi primer lenguaje de programación. Me familiaricé mucho con el paquete dplyr para filtrar datos según ciertas condiciones. Avance rápido unos años cuando comencé a usar Python e inicialmente tenía aversión a Pandas debido a lo diferente que era de dplyr.  

Con el paso del tiempo, me sentí más cómodo usando los métodos de Pandas para filtrar datos y se volvió menos intimidante. Esta publicación de blog es un tutorial de cinco formas de filtrar datos de manera condicional usando Pandas, usando un filtro de condición única y luego un filtro de condición múltiple.

Las técnicas de filtrado utilizadas en este post son:

  • Filtrado de pandas con corchetes de selección
  • Métodos de la serie Pandas: isin(), between(), contains()
  • Definición de filtros separados fuera del filtrado de soporte de selección
  • consulta()
  • ubicación[]
  • Bonificación: usar el método pandas filter()

El conjunto de datos para esta publicación proviene de "The Vehicle Dataset" de Nehla Birla alojado en Kaggle.com y contiene información sobre autos usados ​​en venta. 

Para comenzar, importo Pandas y leo el conjunto de datos.

Cinco formas de hacer filtrado condicional en Pandas
 

Para tener una idea de la sintaxis y la legibilidad de cada método, esta publicación analiza dos ejemplos para filtrar el conjunto de datos del vehículo: uno simple y otro con múltiples condiciones.

  1. Filtro simple: encuentre todos los autos del año 2013 y más nuevos
  2. Filtro multicondiciones: Encuentra todos los Hondas de los años 2013, 2014 y 2015 entre los precios 300000 y 450000 (ambos incluidos). 

Encontrar todos los vehículos que tienen un año de 2013 o más reciente es una tarea de filtrado bastante estándar de Pandas: seleccione la columna del conjunto de datos para filtrar, dígale qué valor filtrar y conecte esa condición entre paréntesis para todo el marco de datos.

Cinco formas de hacer filtrado condicional en Pandas
 

Si queremos hacer nuestra búsqueda de múltiples condiciones, podemos poner cada filtro individual entre paréntesis () separados por nuestro criterio de búsqueda booleano (& para y, | para o, y ~ para no). 

Cinco formas de hacer filtrado condicional en Pandas
 

Técnicamente, estas condiciones múltiples funcionan, pero la legibilidad de este código no es muy buena. Hay corchetes y paréntesis por todos lados. Para limpiar el código y usar menos condiciones, pandas tiene varios métodos que podemos aplicar para obtener los mismos resultados, uno de los cuales acabamos de usar en el fragmento de código anterior, llamado str.contains().

Existen numerosos métodos pandas.Series que podemos aplicar a nuestras columnas. Están listados en el Documentación de pandas. La razón por la que observamos los métodos de serie mientras filtramos es porque cada columna de nuestro Pandas.DataFrame individualmente es un elemento de Pandas.Series, por lo que podemos aplicarle los métodos y la funcionalidad de Pandas.Series.

Existen numerosos métodos que podríamos usar con el conjunto de datos de vehículos, pero para filtrar los datos con nuestro ejemplo de condición múltiple, usaremos:

  • isin(): verifica si los valores de la serie están en una lista dada
  • str.contains(): verifica si hay una cadena en la serie
  • between () - encuentra el valor de la serie que está entre dos valores

Usaremos isin() para verificar qué vehículos cumplen con nuestros años de interés, str.contains() para encontrar qué vehículos tienen Honda en el nombre y between() para encontrar vehículos en nuestro rango de precios.

Cinco formas de hacer filtrado condicional en Pandas
 

Esto limpia un poco el código y aprovecha algunos métodos de Pandas.Series, pero el código aún no es exactamente legible. Para que esto se vea mejor, podemos colocar nuestro código en varias líneas, una línea por acción de filtrado. La forma de hacerlo es colocando paréntesis regulares justo dentro de los corchetes de selección del marco de datos inicial y luego insertando todas las condiciones dentro de estos paréntesis.

Cinco formas de hacer filtrado condicional en Pandas

Una combinación de los dos métodos anteriores, podemos definir filtros fuera de nuestros corchetes de selección como variables y luego llamar a cada variable dentro de los corchetes de selección. Esta es una forma limpia de escribir cada filtro en su propia línea individual y luego llamar a todos los filtros en una línea de código. Significa menos paréntesis generales y saltos de línea en todo el código.

Cinco formas de hacer filtrado condicional en Pandas

Escuché por primera vez sobre pandas.Series.query hace uno o dos años en un podcast, y al principio no era un fanático. Con el tiempo, realmente ha crecido en mí. Una expresión de consulta es una excelente manera de dividir los datos en subconjuntos: pueden ser básicos y fáciles o complejos y poderosos. La expresión de consulta para subconjuntos de vehículos con años 2013 y posteriores es simple. Introduces tus parámetros de filtrado como una cadena.

Cinco formas de hacer filtrado condicional en Pandas
 

A medida que avanza a los filtros de múltiples condiciones, puede hacer que su cadena de consulta sea más compleja. En lugar de escribir & o | entre sus parámetros de filtro, simplemente escriba y o o, respectivamente. A continuación se muestra el código para escribir una expresión de consulta para nuestro filtro de múltiples condiciones. *Nota: para llamar a variables que están dentro del entorno pero fuera del DataFrame/Series que está consultando, debe usar una @ antes de llamar a la variable. Vea el uso de @ inmediatamente antes de llamar a la lista "años".

Cinco formas de hacer filtrado condicional en Pandas
 
¡Esta es una forma realmente ordenada de dividir en subconjuntos sus datos! Sin embargo, cuantos más parámetros de consulta agregue, menos legible será. Para superar este problema, usando la consulta, podemos simplemente agregar un salto de línea en el lugar donde queremos y continuar la expresión de consulta en la línea siguiente. Si queremos, podemos mantener la notación de poner una condición de filtro por línea.

Cinco formas de hacer filtrado condicional en Pandas

Realmente disfruto el poder que viene con el uso de funciones lambda de python. ¿Cómo podemos traducir lambda para filtrar el conjunto de datos de vehículos con nuestras condiciones? Con el filtro simple de condición única que hemos estado aplicando, llamamos a loc fuera de nuestro marco de datos, y con lambda, podemos insertar nuestra condición.

Cinco formas de hacer filtrado condicional en Pandas
 

Si queremos agregar múltiples condiciones, podemos simplemente encadenar otro loc con los resultados del anterior. Sin embargo, si se deja en una sola línea, ¡hay corchetes y puntos por todas partes! Se vuelve muy difícil de leer. Para hacer esto más legible, podemos envolver todo el lado derecho de nuestra expresión entre paréntesis y luego podemos poner cada filtro loc en su propia línea.

Cinco formas de hacer filtrado condicional en Pandas

Como comentario aparte, el método filter() de Pandas.DataFrame no le permite filtrar conjuntos de datos en función de los datos dentro del conjunto de datos, como el nombre implicado para mí originalmente. Más bien, el método filter() le permite filtrar en función de los nombres de filas/índices y/o nombres de columnas como una forma de crear subconjuntos de datos. 

Filtrar el conjunto de datos del vehículo que solo tiene unas pocas columnas y los nombres de índice como números enteros no demuestra exactamente el poder de filter(). Podríamos convertir los valores dentro de la columna "nombre" en el índice, que consiste en la marca y el modelo del automóvil. Sin embargo, hay varias filas que tienen la misma marca y modelo y tendrían el mismo índice, lo cual no es una buena práctica. Por lo tanto, para usar marca y modelo, pero también hacer que cada índice sea único, el índice entero actual se concatena con la marca y el modelo de la fila, y luego se convierte en el nuevo índice. Puede o no querer hacer eso en la práctica, pero quería hacerlo solo para demostrar el método.

Cinco formas de hacer filtrado condicional en Pandas
 

Con este nuevo índice, podemos usar el método filter() de Pandas.DataFrame para filtrar según el nombre del índice. Con filter(), podemos buscar índices particulares usando la entrada like (que es similar a str.contains() como usamos antes) o podemos buscar índices usando expresiones regulares. Para filtrar los datos según el filtro de múltiples condiciones que hemos utilizado a lo largo de esta publicación, podemos obtener los mismos resultados que se muestran en las otras cinco técnicas. La única diferencia ahora es que estamos usando valores de índice para ayudar a filtrar los resultados.

Cinco formas de hacer filtrado condicional en Pandas

¡Eso es todo! Hemos visto cinco técnicas y una técnica de bonificación para ayudar a rebanar y trocear sus datos según uno o varios criterios de filtrado. No estoy seguro de cuál me gusta más; Supongo que depende del caso de uso. Puedo verme usando query() por la facilidad y legibilidad de las expresiones de cadena de consulta, ¡pero también puedo verme usando loc[] con funciones lambda!  

¡Espero que esta publicación le haya dado algunas ideas sobre cómo puede aplicar algunas funciones poderosas de Pandas a sus datos!

 
 
Bryan Kolano es un oficial del Ejército de EE. UU. en servicio activo y científico de datos que vive en las afueras de Washington, DC Cuando no está tratando de mejorar sus habilidades con Python, se encuentra pasando tiempo con su esposa y sus cuatro hijos o estudiando español y francés.
 

punto_img

Información más reciente

punto_img