Skip to content
Empieza gratis

¿Cómo sé si mi limpieza perdió filas? Cuenta antes y después de cada paso

Escribe una bitácora que cuente filas en cada paso de la limpieza, y atrapa un paso que se lleva 46 ventas sin dar ningún error.

Curso gratis. Tu Maestro, una IA, .

Hasta aquí cada arreglo vino con su propia comprobación: contar huecos después del mapa, contar huecos después de convertir, contar marcas. Esta página junta todo en un hábito que te va a acompañar el resto del curso: contar las filas antes y después de cada paso, y anotarlo.

La razón es sencilla. Los pasos de limpieza que pierden datos casi nunca dan error. Un mapa incompleto deja huecos sin avisar; un filtro se lleva filas sin avisar; un dropna() se lleva todo lo que tenga un hueco en cualquier columna, sin avisar. Lo único que te avisa es un número que cambió cuando no debía.

Empieza prediciendo qué hace dropna() en una tabla pequeña.

dropna() sin más

Ejemplo 1 de 2

example.py
import pandas as pd

t = pd.DataFrame({
    "folio": ["A", "B", "C", "D", "E"],
    "kilos": [40, None, 25, 30, 12],
    "descuento": [None, 5, None, 10, 10],
})

print(len(t.dropna()))

Adivinar está bien: se guarda tal como la escribiste para compararla. Solo tú y tu Maestro ven tus predicciones.

Ejemplo 2 de 2, se abre cuando expliques este

Haz tu predicción

Una función de diez segundos

No hace falta nada sofisticado. Una lista y una función que agrega un renglón cada vez que terminas un paso:

Python
bitacora = []

def anota(paso, antes, despues, nota):
    bitacora.append({"paso": paso, "antes": antes, "despues": despues, "nota": nota})
    print(f"{paso:<20} {antes:>3} -> {despues:>3}   {nota}")
Cada paso anota su nombre, las filas antes, las filas después y una nota con el porqué.

Después de cada paso de la limpieza llamas a anota con len(ventas) de antes y de después, y una nota corta: qué hizo y por qué. La función imprime un renglón por paso, así que la salida del script ya es un resumen que puedes leer de un vistazo, y la lista bitacora la puedes guardar como CSV junto a la tabla limpia (lo haces en el último módulo).

Al leer la bitácora, compara cada renglón con lo que el paso debía hacer:

  • Un paso que cambia texto o tipos (normalizar la ciudad, convertir el monto, marcar valores imposibles) debe dejar el mismo número de filas. Si baja, algo se perdió.
  • Un paso que quita filas a propósito (quitar duplicados, quedarse con las ventas que tienen monto) debe bajar exactamente lo que esperabas, y la nota dice cuántas y por qué.
  • Una caída grande sin explicación es la alarma más clara que vas a tener.

La nota importa tanto como los números. Dentro de tres meses, "58 ventas" no dice nada. "Quedan 58: sin V-0036, pendiente de factura, y sin V-0050, que decía 'pendiente'" contesta la pregunta antes de que alguien la haga.

¿No sabes qué escribir en la nota de un paso? Pídele a tu Maestro que te ayude a redactarla.

Inténtalo

Marisol te pide una tabla de ventas cobradas para sumar el total: solo las ventas que tienen monto. Alguien ya escribió el código, con su bitácora, y usó dropna(). Córrelo y lee la bitácora. Si la caída no te cuadra, pregúntale a tu Maestro qué columna la está causando.

Corre el código y lee la bitácora: el último paso debía quitar solo las ventas sin monto. Encuentra por qué se lleva tantas y corrígelo para que quite solo esas. Terminaste cuando la bitácora dice 60 - 58 en ese paso.

Corre el código y lee la bitácora: el último paso debía quitar solo las ventas sin monto. Encuentra por qué se lleva tantas y corrígelo para que quite solo esas. Terminaste cuando la bitácora dice 60 -> 58 en ese paso.

Ejecuta tu código para ver lo que imprime y el valor de su última expresión. Cada ejecución empieza de nuevo.

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.

Los datos del ejercicio, "ventas-cooperativa". Tus cambios corren con tu código.
FilaQuitar
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Página 1 de 3

Ejecútalo tú

El código original deja 14 de 60 ventas, sin ningún error. La causa es sobre todo descuento: 44 ventas lo tienen vacío (que quiere decir cero, como confirmó Marisol), y dropna() sin subset quitó toda venta con algún hueco: esas, las dos sin monto y la que no tiene kilos, 46 en total. Con subset=["monto"] el paso hace lo que dice su nota.

Sin la bitácora, el total cobrado habría salido con menos de un cuarto de las ventas, y el número se habría visto perfectamente normal.

Comprueba lo que sabes: En tu bitácora, el paso "normalizar ciudad" dice 60 -> 57. ¿Qué concluyes?