pandas: Limpieza de Datos
En el mundo de fantasía, los datos llegan perfectos. En el mundo real, llegan sucios, incompletos, duplicados y llenos de formatos inconsistentes. La limpieza consume el 60-80% del tiempo de un Data Analyst. Si no limpiás, tu análisis es basura — "garbage in, garbage out".
Concepto teórico
Los 4 jinetes del caos en datos
Casi todos los problemas de calidad de datos en tu carrera van a caer en estas cuatro categorías:
| Problema | Ejemplo real | Herramienta pandas |
|---|---|---|
| Valores nulos (NaN) | Cliente sin email, saldo sin informar | isna(), fillna(), dropna() |
| Duplicados | Mismo cliente cargado 2 veces | duplicated(), drop_duplicates() |
| Tipos incorrectos | Saldo guardado como texto "150000" | astype(), pd.to_numeric() |
| Strings sucios | " GARCÍA " vs "garcía" vs "Garcia" | .str.strip(), .str.lower(), .str.replace() |
NaN: El fantasma de pandas
NaN (Not a Number) es la representación universal de "dato faltante" en pandas. Viene del módulo
numpy. Tiene un comportamiento especial que causa bugs silenciosos si no lo conocés:
NaN == NaNdaFalse(¡un NaN nunca es igual a sí mismo!)- Cualquier operación aritmética con NaN da NaN (
5 + NaN = NaN) - Para detectar NaN usás
isna()oisnull(), NUNCA== NaN
.mean(). Esto puede ser bueno o malo: si el 40% de tus
datos son nulos, tu promedio se basa en el 60% restante y puede no ser representativo. Siempre revisá
isna().sum() antes de calcular estadísticas.
Estrategias para manejar nulos
| Estrategia | Método | Cuándo usarla |
|---|---|---|
| Eliminar filas | df.dropna() |
Pocos nulos, perder filas es aceptable |
| Rellenar con valor fijo | df.fillna(0) |
Nulo significa "cero" (ej: ventas sin registrar) |
| Rellenar con estadístico | df.fillna(df.mean()) |
Preservar la distribución general |
| Rellenar con el anterior | df.ffill() |
Series temporales (usar último valor conocido) |
Ejemplos explicados paso a paso
Ejemplo 1: Detectar y contar nulos
Antes de limpiar, necesitás un diagnóstico. isna() te muestra dónde están los huecos.
Hacé clic en ▶ Ejecutar
Ejemplo 2: Eliminar vs rellenar nulos
Las dos estrategias principales y cuándo usar cada una.
Hacé clic en ▶ Ejecutar
Ejemplo 3: Eliminar duplicados
Los duplicados engañan tus métricas. Si un cliente aparece 3 veces, tu conteo de clientes está inflado un 200%. Detectálos y eliminá los sobrantes.
Hacé clic en ▶ Ejecutar
Ejemplo 4: Corregir tipos de datos
Un clásico: el campo "Saldo" vino como texto porque el CSV lo exportaron mal. Si no convertís,
sum() concatena strings en vez de sumar números.
Hacé clic en ▶ Ejecutar
df.dtypes inmediatamente después de
importar un CSV. Si una columna numérica dice object, significa que pandas la interpretó como
texto. Significa que hay algún caracter extraño en alguna fila que impidió la conversión automática.Ejemplo 5: Limpiar strings sucios
Los nombres de ciudades escritos de 10 formas distintas son el dolor de cabeza de todo analista. El accessor
.str de pandas permite operaciones de limpieza vectorizadas sobre columnas de texto.
Hacé clic en ▶ Ejecutar
Referencia rápida
| Método | Qué hace | Modifica el original? |
|---|---|---|
df.isna() |
Máscara True donde hay NaN | No (devuelve nuevo) |
df.isna().sum() |
Cuenta nulos por columna | No |
df.dropna() |
Elimina filas con nulos | No (devuelve nuevo) |
df.fillna(valor) |
Reemplaza NaN con valor | No (devuelve nuevo) |
df.duplicated() |
Máscara True en duplicados | No |
df.drop_duplicates() |
Elimina filas repetidas | No (devuelve nuevo) |
df["col"].astype(tipo) |
Convierte tipo de dato | No (devuelve nuevo) |
df["col"].str.strip() |
Elimina espacios extremos | No (devuelve nuevo) |
df["col"].str.upper() |
Todo a mayúsculas | No (devuelve nuevo) |
df["col"].str.replace() |
Reemplaza texto | No (devuelve nuevo) |
Ejercicios
Ejercicio 1: Contar nulos
El dataset tiene valores faltantes. Usá .isna().sum() para contar cuántos nulos hay por columna.
El output debe incluir el número 2 (la columna Email tiene 2 nulos).
Hacé clic en ▶ Ejecutar
Ejercicio 2: Eliminar filas con nulos
Usá .dropna() para quedarte solo con filas completas. Imprimí cuántas filas quedan usando
len(). Deben quedar 2.
Hacé clic en ▶ Ejecutar
Ejercicio 3: Rellenar nulos con cero
La columna Saldo tiene un NaN. Rellenalo con 0 usando fillna() e
imprimí la suma total de saldos. Debe dar 1600.
Hacé clic en ▶ Ejecutar
Ejercicio 4: Detectar y contar duplicados
El dataset tiene clientes repetidos. Usá .duplicated().sum() para contar cuántos duplicados hay.
Debe dar 2.
Hacé clic en ▶ Ejecutar
Ejercicio 5: Eliminar duplicados por columna clave
Eliminá duplicados basándote en la columna "DNI", quedándote con la primera aparición. Imprimí
cuántas filas únicas quedan. Deben ser 3.
Hacé clic en ▶ Ejecutar
Ejercicio 6: Convertir tipo de dato
La columna "Monto" es un string. Convertila a int con astype() e
imprimí la suma. Debe dar 2850.
Hacé clic en ▶ Ejecutar
Ejercicio 7: Limpiar strings con strip y upper
Las ciudades se cargaron con inconsistencias de mayúsculas y espacios. Limpiá la columna usando
.str.strip().str.upper(). Luego contá cuántos son "CABA". Debe dar 3.
Hacé clic en ▶ Ejecutar
Ejercicio 8: Limpiar montos con símbolos
Los montos tienen $ y ,. Limpiálos y convertílos a float, luego
imprimí el total. Debe dar 6470.5.
Hacé clic en ▶ Ejecutar
Ejercicio 9: Pipeline de limpieza completo
El dataset tiene nulos en Saldo y duplicados por DNI. Primero rellenálos con la
media, después eliminá duplicados. Imprimí la suma final de saldos. Debe incluir 1520000.
Hacé clic en ▶ Ejecutar
Ejercicio 10: Diagnóstico de salud de datos
Escribí un mini reporte que imprima: (1) Total de filas, (2) Nulos por columna, (3) Duplicados, (4) Tipos de
dato. Debe incluir la palabra object (tipo de las columnas de texto).
Hacé clic en ▶ Ejecutar
Resumen y conexión
- Siempre empezá revisando
df.isna().sum()ydf.duplicated().sum(). dropna()elimina filas con nulos;fillna()los reemplaza.drop_duplicates(subset="col")limpia registros repetidos por clave.astype()corrige tipos. Si la columna diceobjectpero debería ser número, convertíla.- El accessor
.strte dastrip(),upper(),replace()para limpiar texto. - Documentá siempre qué limpiaste y por qué — es parte del proceso profesional.
En la siguiente lección (06 · pandas: transformaciones) vas a aprender a crear nuevas columnas, aplicar funciones, mapear valores y realizar los cálculos que convierten datos crudos en métricas de negocio.
Recursos: pandas docs — Working with missing data