¿Qué reviso en una tabla antes de limpiarla? Haz el inventario de problemas
Revisa la hoja de ventas completa con cinco miradas que no cambian nada, y escribe la lista de lo que hay que arreglar antes de arreglar algo.
Curso gratis. Tu Maestro, una IA, .
Antes de arreglar algo, haz la lista completa de lo que está mal. Suena lento, y es justo lo que te ahorra tiempo: si arreglas lo primero que ves, vas a descubrir el siguiente problema con el reporte ya enviado. Y a veces un arreglo esconde otro problema: si llenas los huecos con cero antes de contarlos, ya no sabes cuántos faltaban.
Mirar no cambia nada. Ninguna de las líneas de esta página modifica la tabla; solo le hacen preguntas. Por eso puedes correrlas todas las veces que quieras, en cualquier orden, sin miedo.
En pandas, la hoja completa de marzo es un DataFrame que aquí se llama ventas. Estas son las cinco miradas, cada una con la línea que la hace:
Tamaño y tipos
ventas.shapedice cuántas filas y columnas hay, yventas.dtypesde qué tipo es cada columna. Una columna de dinero de tipostres texto, aunque se vea como número.Huecos por columna
ventas.isna().sum()cuenta las celdas vacías de cada columna. Un hueco todavía no es un error: falta averiguar qué quiere decir.Valores de las columnas de texto
ventas["ciudad"].value_counts(dropna=False)lista cada valor con cuántas veces aparece, huecos incluidos. Ahí salen las variantes, los espacios y las abreviaturas.Mínimo y máximo de los números
ventas["kilos"].describe()da el conteo, el mínimo, el máximo y los cuartiles. Un mínimo negativo o un máximo enorme son la primera pista de un valor imposible.Lo que debería ser único
Un folio identifica una venta.
ventas["folio"].duplicated().sum()cuenta cuántas veces aparece un folio de más.
Así salió el inventario de la hoja de marzo. Corrimos estas líneas en el sandbox de Maestro, sobre los 60 renglones:
ventas = data
print(ventas.shape)
print(ventas.dtypes)
print(ventas.isna().sum())
print(ventas["kilos"].describe())
print(ventas["folio"].duplicated().sum())(60, 9)
captura int64
folio str
fecha str
cliente str
ciudad str
producto str
kilos float64
monto str
descuento float64
dtype: object
captura 0
folio 0
fecha 0
cliente 0
ciudad 0
producto 0
kilos 1
monto 1
descuento 44
dtype: int64
count 59.000000
mean 252.949153
std 1292.906435
min -12.000000
25% 28.000000
50% 53.000000
75% 159.000000
max 9999.000000
Name: kilos, dtype: float64
2Léelo como una lista de pendientes, de arriba hacia abajo:
- 60 filas y 9 columnas. Es el número contra el que vas a comparar cada paso de la limpieza.
montoesstr. Los montos son texto: no puedes sumarlos todavía. Lo arreglas en el módulo 2.- Huecos: 1 en
kilos, 1 enmontoy 44 endescuento. Antes de llenar o borrar cualquiera, hay que saber qué quiere decir cada uno (la página siguiente). kilosva de -12 a 9999. La mediana es 53, así que esos dos extremos no se parecen a nada más de la hoja. El promedio, 252.9, ya está contaminado por ellos.- 2 folios de más. Hay ventas que aparecen dos veces, o algo que se parece.
Fíjate en lo que no hiciste: no borraste el -12, no llenaste los huecos, no quitaste los folios repetidos. Solo los anotaste. La lista completa te deja decidir con calma y preguntar todo de una vez, en lugar de mandarle a Marisol cinco mensajes sueltos.
Y fíjate también en lo que este inventario no ve: las 12 formas de escribir 4 ciudades salen solo cuando cuentas los valores de ciudad, que es lo que vas a hacer tú.
Inténtalo
Completa el inventario con la mirada que falta. Si una salida no te queda clara, pídele a tu Maestro que te la lea renglón por renglón.
Agrega las miradas a las columnas de texto: valuecounts(dropna=False) para ciudad y para producto, y también para descuento. Después, en los comentarios del final, escribe tu lista de problemas, uno por línea. Terminaste cuando ves las 12 formas de escribir la ciudad y tu lista t
Agrega las miradas a las columnas de texto: value_counts(dropna=False) para ciudad y para producto, y también para descuento. Después, en los comentarios del final, escribe tu lista de problemas, uno por línea. Terminaste cuando ves las 12 formas de escribir la ciudad y tu lista tiene al menos seis problemas.
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: ventas-cooperativa, 60 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 |
Los huecos que isna() no cuenta
isna() cuenta solo lo que pandas ya reconoce como vacío. Al abrir un CSV, pandas lee como vacío la celda sin nada y también textos como "N/A" o "NULL" (la documentación de read_csv dice cuáles). Pero un espacio solo, un guion o un "sin dato" siguen siendo texto: para pandas son un valor más.
Lo probamos en el sandbox con una columna de cinco celdas capturadas de cinco formas: una vacía, una con "N/A", una con un espacio, una con un guion y una con un 5. isna().sum() contó 2 huecos, y la columna entera se quedó como texto (str) en lugar de volverse número. Los otros dos "huecos" solo aparecieron en value_counts(dropna=False), como un espacio y un guion.
Por eso el inventario incluye value_counts aunque la columna parezca numérica. Si una columna de números sale como str, o value_counts muestra un "-", hay huecos disfrazados que isna() no vio. Anótalos igual que los demás y pregunta qué quieren decir.
¿Tu hoja usa un guion, "s/d" o "sin dato" para decir que falta algo? Cuéntale a tu Maestro cómo aparece.
Qué hacer con la lista
La lista no la resuelves toda tú. Sepárala en dos columnas: lo que puedes decidir solo (que "puebla" es Puebla, que el espacio de "cdmx " sobra) y lo que necesita a quien conoce los datos (qué quiere decir un descuento vacío, qué pasó con los -12 kilos, si "Oaxaca" es la capital). Esa segunda columna es la más importante del inventario, y de ella se trata la página siguiente.
Si no sabes si un problema de tu lista lo decides tú o alguien más, pregúntale a tu Maestro.