Módulo 3 · 03 | Limpieza y transformación de datos

Módulo 3 · Clase 3.03 · Lectura y práctica

Limpieza y transformación de datos

Objetivo: diagnosticar errores, aplicar reglas explícitas y producir una tabla válida con observaciones trazables. Caso sintético; importes en guaraníes. Conservá los archivos originales.

1. Diagnóstico

El paquete de materiales incluye ventas_desordenadas.csv: 12 filas con una repetición exacta, textos de sucursal inconsistentes, fecha inválida, unidades ausentes o negativas, precio no numérico y sucursal ausente. Abrí el CSV en la misma carpeta del notebook.

from pathlib import Path
import pandas as pd
raw = pd.read_csv('ventas_desordenadas.csv', dtype='string')
print(raw)
print(raw.isna().sum())
print(raw.duplicated().sum()) # 1

df = raw.drop_duplicates().copy()
df['sucursal'] = df['sucursal'].str.strip().str.casefold().replace({
    'centro': 'Centro', 'san lorenzo': 'San Lorenzo', 'luque': 'Luque'})
df['fecha'] = pd.to_datetime(df['fecha'], format='%Y-%m-%d', errors='coerce')
for col in ['unidades', 'precio_unitario']:
    df[col] = pd.to_numeric(df[col], errors='coerce')

errors=”coerce” transforma valores no interpretables en ausentes. No significa que el problema esté resuelto. La fila original debe poder revisarse.

2. Reglas de calidad

Para este ejercicio: clave presente y única, fecha válida, sucursal y producto conocidos, unidades enteras positivas y precio positivo. Estas reglas son una decisión del caso; en un negocio con devoluciones deben revisarse. Se retiran solamente repeticiones exactas; claves iguales con valores distintos van a revisión.

reglas = pd.DataFrame({
    'clave_ausente': df['operacion'].isna() | df['operacion'].str.strip().eq(''),
    'clave_repetida': df['operacion'].duplicated(keep=False),
    'fecha_invalida': df['fecha'].isna(),
    'sucursal_invalida': ~df['sucursal'].isin(['Centro','San Lorenzo','Luque']),
    'producto_invalido': ~df['producto'].isin(['Teclado','Mouse','Monitor']),
    'unidades_invalidas': df['unidades'].isna() | df['unidades'].le(0) | df['unidades'].mod(1).ne(0),
    'precio_invalido': df['precio_unitario'].isna() | df['precio_unitario'].le(0)
}).fillna(True)
invalida = reglas.any(axis=1)
revisar = raw.loc[df.index[invalida]].copy()
revisar['motivo'] = reglas.loc[invalida].apply(
    lambda fila: '; '.join(fila.index[fila.to_numpy(dtype=bool)]), axis=1)
limpias = df.loc[~invalida].copy()
limpias['unidades'] = limpias['unidades'].astype('int64')
limpias['importe'] = limpias['unidades'] * limpias['precio_unitario']

3. Conciliación y exportación

assert len(raw) == 12
assert len(raw) - len(df) == 1
assert len(limpias) == 6 and len(revisar) == 5
assert limpias['importe'].sum() == 3900000
salidas = Path('salidas')
salidas.mkdir(exist_ok=True)
limpias.to_csv(salidas / 'ventas_limpias.csv', index=False)
revisar.to_csv(salidas / 'registros_revisar.csv', index=False)
print(limpias.groupby('sucursal')['importe'].sum())

Control: 12 filas = 1 repetición retirada + 5 observaciones + 6 válidas. Total válido: 17 unidades y G. 3.900.000. Reejecutar reemplaza los archivos generados en salidas.

Práctica y evaluación integradora

  1. Calculá el porcentaje de filas para revisión sobre las 11 filas sin repeticiones exactas.
  2. Clasificá importes de al menos G. 500.000 como «Alta» y el resto como «Regular».
  3. Indicá qué comprobantes pedirías para corregir fecha y precio desconocidos.
  4. Entregá un notebook ejecutado, tabla limpia, observaciones con motivo y resumen por sucursal.
  5. Redactá tres hallazgos, una limitación y una mejora para la captura de datos.
Solución y criterios de revisión
print(len(revisar) / len(df) * 100) # 45.4545...
limpias['nivel'] = 'Regular'
limpias.loc[limpias['importe'] >= 500000, 'nivel'] = 'Alta'

No reemplaces una fecha desconocida por la actual ni un precio desconocido por cero. Consultá el comprobante. Las filas excluidas pueden sesgar cualquier extrapolación.

Rúbrica sugerida de 100 puntos: comprensión de la tabla 10; diagnóstico 15; transformación 20; reglas y trazabilidad 20; cálculos y conciliación 20; comunicación y reproducibilidad 15. Esta pauta es didáctica y no registra automáticamente una nota.

Fuentes oficiales verificadas

Consulta: 14/10/2026. Caso, reglas y ejercicios originales. Datos sintéticos.

Materiales descargables del Módulo 3

Descargar notebooks, datos y evaluación (ZIP)

Descomprimí el paquete. Incluye tres cuadernos .ipynb con ejercicios y soluciones, dos CSV sintéticos, guía docente, evaluación con rúbrica y referencias oficiales verificadas. Abrí el cuaderno de esta clase y ejecutá las celdas en orden desde esa carpeta. Consultá LEEME.md para preparar el entorno.

Scroll al inicio
¿Consultas? Escribinos