Python

Comparar cadenas con espacios en Pandas

Los DataFrame de Pandas son una excelente herramienta para procesar los conjuntos de datos. Con ellos es posible seleccionar los registros en base a los valores de las diferentes columnas o eliminar aquellos que no cumplan una condición. Algo que se puede hacer con valores numéricos, fechas y cadenas de texto. Pero ¿qué pasa cuando los registros de texto no son iguales? Por ejemplo, cuando existen cadenas con espacios en blanco. Para solucionar esto y poder comparar cadenas con espacios en Pandas se puede usar los métodos .srt que ofrece la librera.

Seleccionar registros cuando existen cadenas con espacios en Pandas

Supongamos que se dispone de un DataFrame en el que se almacenan las referencias de una serie de productos como la que se muestra a continuación.

import pandas as pd

data = {
    'Producto': ['Camiseta', 'Zapatos', 'Silla', 'Mesa', 'Cojín', 'Lámpara', 'Cubiertos'],
    'Color': ['Blanco ', 'Azul', ' Negro', 'Blanco', 'blanco', '  blanco  ', 'Verde'],
    'Precio': [15.99, 49.99, 29.99, 79.99, 9.99, 39.99, 12.99],
    'Stock': [20, 15, 10, 5, 30, 8, 25]
}

df = pd.DataFrame(data)
df
    Producto       Color  Precio  Stock
0   Camiseta     Blanco    15.99     20
1    Zapatos        Azul   49.99     15
2      Silla       Negro   29.99     10
3       Mesa      Blanco   79.99      5
4      Cojín      blanco    9.99     30
5    Lámpara    blanco     39.99      8
6  Cubiertos       Verde   12.99     25

Si se necesita seleccionar todos los productos que tiene como propiedad el color blanco se puede usar un simple filtrado del DataFrame como el que se muestra a continuación.

df[df.Color == 'Blanco']
  Producto   Color  Precio  Stock
3     Mesa  Blanco   79.99      5

Pero, en este caso el resultado no es correcto, el primer registro del conjunto de datos tiene el color blanco, pero la cadena contiene un espacio al final. Para solucionar esto se puede usar el método .str.strip() disponibles en las Series de Pandas. Este método elimina los espacios no significativos, los que se muestran al principio y al final de la cadena, de todos los elementos de la serie, devolviendo un nuevo objeto. El cual se puede comparar con la cadena objetivo.

df[df.Color.str.strip() == 'Blanco']
   Producto    Color  Precio  Stock
0  Camiseta  Blanco    15.99     20
3      Mesa   Blanco   79.99      5

Comparar cadenas ignorando mayúsculas y minúsculas

En el ejemplo anterior ya han obtenido los dos primeros registros con el color blanco, pero no el quinto y sexto que contiene la palabra en minúsculas. Para solucionar este problema se puede usar el método .str.lower() para hacer que todos las letras de la cadena sean minúsculas (o si se prefiere .str.upper() para hacer que todas las letras sean mayúsculas) y comparar con una cadena en minúsculas (o mayúsculas). El método se puede encadenar y aplicar después del anterior combinando ambas operaciones.

df[df.Color.str.strip().str.lower() == 'Blanco'.lower()]
   Producto       Color  Precio  Stock
0  Camiseta     Blanco    15.99     20
3      Mesa      Blanco   79.99      5
4     Cojín      blanco    9.99     30
5   Lámpara    blanco     39.99      8

En este caso también se ha usado el método .lower() que tienen las cadenas de texto en Python para convertir 'Blanco' en minúsculas. Obteniendo como resultado un DataFrame en el que se encuentra todos los productos de color blanco independientemente de que la cadena contenga o no espacios y esta esté escrita en mayúsculas o minúsculas.

Conclusiones

En esta entrada se ha visto cómo usar el método str.lower() para comparar cadenas con espacios en Pandas y combinar con .str.lower(). Siendo un ejemplo de uso de los métodos .str de los que se dispone en Pandas para trabajar con texto. Conocer estas herramientas, y saber cómo combinarlas, es clave para poder sacar el máximo rendimiento de los DataFrame de Pandas cuando se trabaja con cadenas de texto.

Imagen de Dmitriy en Pixabay

¿Te ha parecido de utilidad el contenido?

Daniel Rodríguez

Share
Published by
Daniel Rodríguez
Tags: Pandas

Recent Posts

Subplots en Matplotlib: cómo organizar múltiples gráficos en una sola figura

Llevas un rato analizando datos y tienes cuatro gráficos abiertos en ventanas separadas: ventas, usuarios,…

11 horas ago

Síndrome del objeto brillante en ciencia de datos: el error simétrico a los costes hundidos

Hace poco publiqué una entrada en la que trataba de un sesgo bien documentado: aferrarse…

5 días ago

De la Regresión Logística al Scorecard: La Transformación Matemática

En un entrada previa explicamos qué son el WOE y el IV y por qué…

1 semana ago

Analytics Lane lanza la versión 1.1 del laboratorio con nuevas suites de CLV y Scoring

Seguimos evolucionando el laboratorio de Analytics Lane y hoy lanzamos la versión 1.1, disponible en:…

1 semana ago

Interés compuesto: la fuerza que multiplica tu dinero (y los errores que la anulan)

“El interés compuesto es la octava maravilla del mundo. El que lo entiende lo gana…

2 semanas ago

Cómo comparar datos con barras en Matplotlib: agrupadas, apiladas y porcentuales

Tienes los datos de ventas de tres productos en dos años distintos y quieres saber…

2 semanas ago

This website uses cookies.