hablé de cómo crear tu primer DataFrame usando Pandas. Mencioné que lo primero que debes dominar son las estructuras y matrices de datos antes de pasar al análisis de datos con Python.
Pandas es una excelente biblioteca para la manipulación y recuperación de datos. Combínelo con Numpy y Seaborne y obtendrá una potencia para el análisis de datos.
En este artículo, lo guiaré a través de formas prácticas de filtrar datos en pandas, comenzando con condiciones simples y pasando a métodos poderosos como .isin(), .str.startswith() y .query(). Al final, tendrá un conjunto de herramientas de técnicas de filtrado que puede aplicar a cualquier conjunto de datos.
Sin más preámbulos, ¡entremos en ello!
Importando nuestros datos
Ok, para empezar, importaré nuestra biblioteca de pandas.
# importando la biblioteca de pandas importar pandas como pd
Esa es la única biblioteca que necesitaré para este caso de uso.
A continuación, importaré el conjunto de datos. El conjunto de datos proviene de ChatGPT, por cierto. Consiste en registros básicos de transacciones de ventas. Echemos un vistazo a nuestro conjunto de datos.
# revisando nuestros datos df_sales = pd.read_csv(‘sales_data.csv’) df_sales
Aquí tienes una vista previa de los datos.
Consta de registros de ventas básicos con columnas OrderId, Cliente, Producto, Categoría, Cantidad, Precio, OrderDate y Región.
Muy bien, ¡comencemos nuestro filtrado!
Filtrar por una sola condición
Intentemos seleccionar todos los registros de una categoría en particular. Por ejemplo, quiero saber cuántos pedidos únicos se realizaron en la categoría Electrónica. Para hacer eso, es bastante sencillo.
# Filtrar por una sola condición # Ejemplo: Todos los pedidos de la categoría “Electrónica”. df_ventas[‘Category’] == ‘Electrónica’
En Python, es necesario distinguir entre el operador = y el operador ==.
= se utiliza para asignar un valor a una variable.
Por ejemplo
x = 10 # Asigna el valor 10 a la variable x
== por otro lado se usa para comparar dos valores juntos. Por ejemplo
a = 3 b = 3 print(a == b) # Salida: Verdadero c = 5 d = 10 print(c == d) # Salida: Falso
Dicho esto, apliquemos la misma noción al filtrado que hice anteriormente.
# Filtrar por una sola condición # Ejemplo: Todos los pedidos de la categoría “Electrónica”. df_ventas[‘Category’] == ‘Electrónica’
Aquí, básicamente le estoy diciendo a Python que busque en todo nuestro registro para encontrar una categoría llamada Electrónica. Cuando encuentra una coincidencia, muestra un resultado booleano, Verdadero o Falso. Aquí está el resultado
Como se puede ver. Obtenemos una salida booleana. Verdadero significa que la electrónica existe, mientras que Falso significa lo último. Esto está bien y todo, pero puede resultar confuso si se trata de una gran cantidad de registros. Arreglemos eso.
# Filtrar por una sola condición # Ejemplo: Todos los pedidos de la categoría “Electrónica”. df_ventas[df_sales[‘Category’] == ‘Electrónica’]
Aquí, simplemente envolví la condición en el DataFrame. Y con eso, obtenemos este resultado.
Mucho mejor, ¿verdad? sigamos adelante
Filtrar filas por condición numérica
Intentemos recuperar registros donde la cantidad del pedido sea mayor que 2. Es bastante sencillo.
# Filtrar filas por condición numérica # Ejemplo: Pedidos donde Cantidad > 2 df_sales[‘Quantity’] > 2
Aquí, estoy usando el operador mayor que >. De manera similar a nuestro resultado anterior, obtendremos un resultado booleano con valores Verdadero y Falso. Arreglemoslo muy rápido.
¡Y ahí vamos!
Filtrar por condición de fecha
Filtrar por fecha es sencillo. Por ejemplo.
# Filtrar por condición de fecha # Ejemplo: pedidos realizados después de “2023–01–08” df_sales[df_sales[“OrderDate”] > “2023–01–08”]
Esto verifica los pedidos realizados después del 8 de enero de 2023. Y aquí está el resultado.
Lo bueno de Pandas es que convierte tipos de datos de cadenas en fechas automáticamente. En los casos en los que encuentre un error. Es posible que desee convertir a una fecha antes de filtrar usando la función to_datetime(). Aquí hay un ejemplo
df[“OrderDate”] = pd.to_datetime(df[“OrderDate”])
Esto convierte nuestra columna OrderDate en un tipo de datos de fecha. Vamos a mejorar las cosas.
Filtrado por múltiples condiciones (Y, O, NO)
Pandas nos permite filtrar según múltiples condiciones utilizando operadores lógicos. Sin embargo, estos operadores son diferentes de los operadores integrados de Python como (y, o no). Estos son los operadores lógicos con los que trabajará más
& (Y lógico)
El símbolo comercial (&) representa AND en pandas. Usamos esto cuando intentamos cumplir dos condiciones. En este caso, ambas condiciones tienen que ser ciertas. Por ejemplo, recuperemos pedidos de la categoría “Muebles” donde Precio > 500.
# Múltiples condiciones (Y) # Ejemplo: Pedidos de “Muebles” donde Precio > 500 df_sales[(df_sales[“Category”] == “Muebles”) & (df_sales[“Price”] > 500)]
Analicemos esto. Aquí tenemos dos condiciones. Uno que recupera pedidos en la categoría Mobiliario y otro que filtra por precios > 500. Usando &, podemos combinar ambas condiciones.
Aquí está el resultado.
Se logró recuperar un registro. Mirándolo, cumple con nuestra condición. Hagamos lo mismo con O
| (O lógico)
El símbolo |, barra vertical se utiliza para representar O en pandas. En este caso, al menos uno de los elementos correspondientes debería ser Verdadero. Por ejemplo, recuperemos registros con pedidos de la región “Norte” O la región “Este”.
# Múltiples condiciones (O) # Ejemplo: Órdenes de la región “Norte” O de la región “Este”. df_ventas[(df_sales[“Region”] == “Norte”) | (df_ventas[“Region”] == “Este”)]
Aquí está la salida
Filtrar con isin()
Digamos que quiero recuperar pedidos de varios clientes. Siempre podría usar el operador &. Por ejemplo
df_ventas[(df_sales[‘Customer’] == ‘Alicia’) | (df_ventas[‘Customer’] == ‘Charlie’)]
Producción:
No hay nada malo en eso. Pero hay una manera mejor y más sencilla de hacer esto. Eso es usando la función isin(). Así es como funciona
# Pedidos de clientes [“Alice”, “Diana”, “James”]. df_ventas[df_sales[“Customer”].isin([“Alice”, “Diana”, “James”])]
Producción:
El código es mucho más fácil y limpio. Usando la función isin(), puedo agregar tantos parámetros como quiera. Pasemos a un filtrado más avanzado.
Filtrar usando coincidencia de cadenas
Una de las funciones poderosas pero infrautilizadas de Pandas es la coincidencia de cadenas. Ayuda muchísimo en las tareas de limpieza de datos cuando intentas buscar patrones en los registros de tu DataFrame. Similar al operador LIKE en SQL. Por ejemplo, recuperemos clientes cuyo nombre comience con “A”.
# Clientes cuyo nombre comienza con “A”. df_ventas[df_sales[“Customer”].str.comienza con(“A”)]
Producción:
Pandas le proporciona el descriptor de acceso .str para usar funciones de cadena. Aquí hay otro ejemplo
# Productos que terminan en “top” (por ejemplo, Laptop). df_ventas[df_sales[“Product”].str.endswith(“arriba”)]
Producción:
Filtrar usando el método query()
Si tiene experiencia en SQL, este método sería muy útil para usted. Intentemos recuperar pedidos de la categoría de electrónica donde la cantidad > 2. Siempre puede ser así.
df_ventas[(df_sales[“Category”] == “Electrónica”) & (df_sales[“Quantity”] >= 2)]
Producción:
Pero si eres alguien que intenta incorporar tu salsa SQL. Esto funcionará para ti
df.query(“Categoría == ‘Electrónica’ y Cantidad >= 2”)
Obtendrá el mismo resultado anterior. Bastante similar a SQL si me preguntas, y podrás deshacerte del símbolo &. Usaré este método con bastante frecuencia.
Filtrar por valores de columna en un rango
Pandas le permite recuperar un rango de valores. Por ejemplo, las órdenes cuyo precio esté entre 50 y 500 serían así
# Pedidos donde el Precio está entre 50 y 500 df_sales[df_sales[“Price”].entre(50, 500)]
Producción:
Bastante sencillo.
Filtrar valores faltantes (NaN)
Esta es probablemente la función más útil porque, como analista de datos, una de las tareas de limpieza de datos en las que más trabajará es filtrar los valores faltantes. Hacer esto en Pandas es sencillo. Eso es usando la función notna(). Filtremos filas donde el precio no es nulo.
# filtrar filas donde el precio no es nulo. df_ventas[df_sales[“Price”].notna()]
Producción:
Y ahí lo tienes. Realmente no noto la diferencia, pero confiaré en que esté hecho.
Conclusión
La próxima vez que abras un CSV desordenado y te preguntes “¿Por dónde empiezo?”, intenta filtrar primero. Es la forma más rápida de eliminar el ruido y encontrar la historia oculta en sus datos.
La transición a Python para el análisis de datos solía parecer un gran paso, ya que se tenía experiencia en SQL. Pero por alguna razón, Pandas me parece mucho más fácil y requiere menos tiempo para filtrar datos.
Lo bueno de esto es que estas mismas técnicas funcionan sin importar el conjunto de datos: cifras de ventas, respuestas a encuestas, análisis web, lo que sea.
Espero que este artículo te haya resultado útil.
Escribo estos artículos como una forma de probar y fortalecer mi propia comprensión de los conceptos técnicos y de compartir lo que estoy aprendiendo con otras personas que podrían estar en el mismo camino. Siéntete libre de compartir con otros. Aprendamos y crezcamos juntos. ¡Salud!
No dudes en saludar en cualquiera de estas plataformas.
Medio
Gorjeo
YouTube