Cómo filtrar datos de texto en Pandas usando máscaras booleanas
¡Hola, desarrolladores! En el análisis de datos es sumamente común que necesitemos aislar información bajo reglas específicas de texto: buscar nombres que contengan ciertas letras, filtrar correos electrónicos por su dominio o identificar palabras clave.
Hoy resolveremos un problema clásico de forma muy limpia: extraer elementos que cumplan con una condición de texto en una Serie de Pandas separando nuestra condición en una variable de filtro (o máscara booleana). ¡Vamos a aprender cómo hacerlo paso a paso!
📝 El Reto de Hoy
- Crear una Serie de Pandas llamada
frutasque contenga:["manzana", "banana", "cereza", "durazno", "frambuesa"]. - Escribir un código que filtre y muestre solo los elementos que contengan la letra «e» en su nombre utilizando un método de strings.
- Almacenar la condición en una variable llamada
filtropara realizar la extracción final.
🚀 El Código Completo
Aquí tienes la estructura ideal del script para lograrlo con éxito:
Python
import pandas as pd
# Paso 1: Crear la Serie de Pandas con los nombres de las frutas
frutas = pd.Series(["manzana", "banana", "cereza", "durazno", "frambuesa"])
# Paso 2: Crear la máscara booleana usando el método de strings (.str.contains)
# NOTA IMPORTANTE: El accesorio '.str' se escribe estrictamente en minúsculas
filtro = frutas.str.contains('e')
# Paso 3: Imprimir la máscara booleana para ver qué ocurre bajo el capó
print("--- Máscara Booleana (Variable filtro) ---")
print(filtro)
# Paso 4: Aplicar el filtro sobre la Serie original e imprimir el resultado final
print("\n--- Resultado de Frutas Filtradas ---")
print(frutas[filtro])
¿Cómo funciona este método? 🕵️♂️
El secreto de este ejercicio está en separar la condición del filtrado final, aprovechando los métodos vectorizados de Pandas:
- La Condición (
frutas.str.contains('e')): Al usar el accesorio.strle indicamos a Pandas que queremos aplicar funciones de texto a cada elemento de la serie. El método.contains('e')evalúa cada fruta preguntando: ¿Contiene la letra ‘e’?. Al guardarlo en la variablefiltro, Pandas crea una serie interna llena de respuestas lógicas (TrueoFalse). - El Filtro (
frutas[filtro]): Al pasarle nuestra variablefiltroentre los corchetes a la seriefrutas, Pandas descarta automáticamente los índices conFalse(las frutas sin «e») y conserva únicamente losTrue.
💻 Resultado en Consola
Al ejecutar este script en tu terminal, verás exactamente las siguientes dos salidas:
1. Salida de print(filtro):
Plaintext
0 False 1 False 2 True 3 False 4 True dtype: bool
2. Salida de print(frutas[filtro]):
Plaintext
2 cereza 4 frambuesa dtype: object
💡 Un detalle importante para llevar a casa: Como puedes ver en el resultado final, los índices originales (2 y 4) se mantienen intactos tras el filtrado. Esta es una de las grandes ventajas de Pandas, ya que te permite saber de forma exacta en qué posición original de tu lista se encontraba cada registro detectado.