Sección 1 de 5
Limpiar no es borrar: primero detecta el problema
Detecta y trata nulos, duplicados y tipos de datos incorrectos.
Al terminar podrás
Detectar y tratar valores nulos, filas duplicadas y tipos incorrectos en un DataFrame sencillo de ventas.
- Duración
- 40 min
- Nivel
- Aplicar
- Secciones
- 5
- Reconocimiento
- Constancia verificable
Retomemos el archivo ficticio de ventas, pero ahora imagina que llega con problemas: una fila no tiene precio, otra aparece dos veces, una cantidad está escrita como texto y una fecha contiene el valor sin fecha. Si calculas antes de revisar, el resultado puede fallar o responder una pregunta distinta a la que creías.
La limpieza comienza con diagnóstico. ventas.isna().sum() permite contar valores ausentes por columna y ventas.duplicated().sum() ayuda a detectar filas repetidas exactamente. También conviene revisar los tipos con ventas.dtypes. Una columna llamada cantidad puede verse numérica a simple vista y, sin embargo, estar almacenada como texto.
La regla práctica de esta lección es: detectar → decidir → transformar → verificar. No existe un tratamiento automático que sea correcto para todos los casos. La decisión depende de qué significa el dato y de la pregunta que quieres responder.
Clasifica el problema encontrado
Esta actividad necesita JavaScript.
Sección 2 de 5
Nulos: decidir según la pregunta
Si falta el precio de una venta, no puedes calcular su importe sin inventar información. Para un ejercicio que necesite importes, una opción explícita es trabajar temporalmente solo con filas que sí tienen precio: ventas_con_precio = ventas.dropna(subset=["precio"]). El nombre de la nueva variable deja claro qué se excluyó.
En cambio, si falta la sucursal y deseas conservar la venta para un total general, podrías crear una categoría visible con ventas["sucursal"] = ventas["sucursal"].fillna("Sin identificar"). Esa decisión mantiene el registro sin atribuirlo a una sucursal conocida.
Las dos operaciones son técnicamente sencillas; la dificultad está en justificar cuál responde a la pregunta. Eliminar una fila y reemplazar un valor no significan lo mismo y pueden cambiar los resúmenes posteriores.
Elige un tratamiento razonable
Esta actividad necesita JavaScript.
Sección 3 de 5
Duplicados y tipos: corrige la estructura
Si confirmas que una fila está duplicada exactamente, ventas = ventas.drop_duplicates() conserva una ocurrencia y elimina las repeticiones adicionales. Antes de hacerlo debes estar seguro de que se trata del mismo registro y no de dos ventas legítimas con valores coincidentes.
Para una cantidad almacenada como texto, ventas["cantidad"] = pd.to_numeric(ventas["cantidad"], errors="coerce") intenta convertir los valores a número. Los valores que no puedan convertirse pasan a un valor ausente, lo que los vuelve detectables para una decisión posterior. Para fechas, ventas["fecha"] = pd.to_datetime(ventas["fecha"], errors="coerce") aplica la misma idea: una fecha inválida queda marcada como ausente temporal.
Después de transformar, verifica otra vez: revisa dtypes, cuenta nulos y comprueba duplicados. La limpieza es un ciclo porque una conversión puede revelar nuevos valores problemáticos.
Ordena una limpieza segura
Esta actividad necesita JavaScript.
Sección 4 de 5
Cierre: caza la limpieza automática
Un DataFrame “sin errores” no es necesariamente un DataFrame correcto. Si borras todas las filas con algún nulo, podrías perder ventas que todavía sirven para algunas preguntas. Si rellenas todos los precios faltantes con cero, estarías convirtiendo “precio desconocido” en “precio igual a cero”, que significa otra cosa.
Antes de la visualización final, tu flujo queda así: inspecciona, detecta problemas, decide el tratamiento, transforma y verifica. Solo entonces calcula resúmenes que puedan sostener una interpretación.
Caza las acciones riesgosas
Esta actividad necesita JavaScript.
Sección 5 de 5