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
- Calculá el porcentaje de filas para revisión sobre las 11 filas sin repeticiones exactas.
- Clasificá importes de al menos G. 500.000 como «Alta» y el resto como «Regular».
- Indicá qué comprobantes pedirías para corregir fecha y precio desconocidos.
- Entregá un notebook ejecutado, tabla limpia, observaciones con motivo y resumen por sucursal.
- 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.
