¿Cómo limpio texto escrito de varias formas en pandas? strip, lower y un mapa
Junta las 12 formas de escribir la ciudad en 4 nombres oficiales con tres líneas de pandas, y comprueba que no se quedó ninguna afuera.
Curso gratis. Tu Maestro, una IA, .
En el módulo anterior hiciste la lista de problemas y Marisol contestó lo que solo ella sabía. Ahora empiezas a arreglar, y la regla de todo este módulo es una: cada arreglo es una línea de código que lee el dato crudo y deja el limpio. Nada de buscar y reemplazar a mano.
El primer problema de la lista es la ciudad: 12 formas de escribir 4 ciudades. Antes de ver la solución, predice qué hacen tres atajos que mucha gente prueba primero.
Poner cada palabra con mayúscula
Ejemplo 1 de 3
print("oaxaca de juarez".title())
print("cd. de méxico".title())
Adivinar está bien: se guarda tal como la escribiste para compararla. Solo tú y tu Maestro ven tus predicciones.
Ejemplo 2 de 3, se abre cuando expliques este
Tres líneas, en este orden
La receta tiene tres pasos, y el orden importa porque cada uno deja el texto más parejo para el siguiente:
str.strip()quita los espacios del principio y del final. "cdmx " se vuelve "cdmx".str.lower()baja todo a minúsculas. "CDMX" y "Cdmx" se vuelven "cdmx".map()con un diccionario que tiene cada forma que encontraste y el nombre oficial que le corresponde.
Los dos primeros pasos los decides tú: nadie va a defender que "Puebla" y "puebla" son ciudades distintas. El mapa es distinto. Ahí van decisiones que salieron de preguntar, como que en esta hoja "oaxaca" quiere decir la capital, Oaxaca de Juárez, y no el estado. Por eso el mapa es una lista escrita y visible, no un truco escondido en el código: cualquiera puede leerla y decir "esa no".
¿Por qué no quitar también los acentos y ya? Porque "oaxaca de juarez" y "oaxaca de juárez" quedarían iguales, sí, pero el nombre oficial lleva acento, y el reporte lo tiene que llevar. El mapa ya resuelve las dos formas sin perder nada.
Aquí está la receta completa sobre la hoja de ventas, un paso a la vez. Abre cada paso cuando hayas pensado qué va a salir.
De 12 formas a 4 ciudades
Ejemplo resuelto · 5 pasos
La columna ciudad de la hoja de marzo tiene 12 valores distintos para 4 ciudades. Quieres una columna con el nombre oficial de cada una, y saber que no se quedó ninguna venta sin ciudad.
Piensa el siguiente paso por tu cuenta y luego ábrelo para comparar.
Fíjate en el último paso. Sin él, la receta está incompleta: el mapa funciona con las formas que viste hoy, y la hoja de abril va a traer alguna nueva. El conteo de huecos después de map() es tu alarma. Si sale 0, el mapa cubrió todo; si sale 1, hay una forma que no conocías y tienes que decidir (o preguntar) qué ciudad es antes de seguir.
¿Tu columna tiene formas que no sabes a qué valor oficial mandar? Pregúntale a tu Maestro cómo armar el mapa.
Inténtalo
El padrón de socios tiene el mismo problema en municipio: hay "pluma hidalgo", "Pluma Hidalgo " con espacio, "San Agustin Loxicha" sin acento y "Sta. María Huatulco" abreviado. Los municipios oficiales son cuatro: San Agustín Loxicha, Candelaria Loxicha, Pluma Hidalgo y Santa María Huatulco. Si no te sale, pídele a tu Maestro una pista sin la respuesta.
Normaliza municipio: quita espacios, baja a minúsculas y aplica un mapa MUNICIPIOS con cada forma que encuentres. Terminaste cuando valuecounts(dropna=False) muestra exactamente 4 municipios y el conteo de huecos de municipio es 0.
Normaliza municipio: quita espacios, baja a minúsculas y aplica un mapa MUNICIPIOS con cada forma que encuentres. Terminaste cuando value_counts(dropna=False) muestra exactamente 4 municipios y el conteo de huecos de municipio es 0.
Ejecuta tu código para ver lo que imprime y el valor de su última expresión. Cada ejecución empieza de nuevo. Ctrl+Enter ejecuta tu código. Tab agrega sangría; para salir del editor, presiona Escape y luego Tab.
Listo para ejecutar tu código.
Ejecuta tu código para ver su salida aquí.
Datos: socios-cooperativa, 30 filas
Enter guarda una celda y Escape la deja como estaba. Deja una celda vacía para un valor faltante.
| Fila | Quitar | ||||||
|---|---|---|---|---|---|---|---|
| 1 | |||||||
| 2 | |||||||
| 3 | |||||||
| 4 | |||||||
| 5 | |||||||
| 6 | |||||||
| 7 | |||||||
| 8 | |||||||
| 9 | |||||||
| 10 | |||||||
| 11 | |||||||
| 12 | |||||||
| 13 | |||||||
| 14 | |||||||
| 15 | |||||||
| 16 | |||||||
| 17 | |||||||
| 18 | |||||||
| 19 | |||||||
| 20 |
Con la columna así, un conteo de socios por municipio por fin dice la verdad: San Agustín Loxicha 11, Pluma Hidalgo 8, Candelaria Loxicha 6 y Santa María Huatulco 5. Antes de limpiar, Pluma Hidalgo salía partida en tres renglones y San Agustín en dos.