Lección 5 de 16 · Nivel 2: Intermedio

Limpieza de datos: duplicados, errores y valores faltantes

  • ⏱ 13 min de lectura
  • ❓ 4 preguntas de repaso
  • ✍️ Ejercicio con solución
  • 📥 Plantilla descargable
En esta lección
  1. Por qué limpiar cambia las conclusiones
  2. El proceso de limpieza, paso a paso
  3. Paso 1: perfila los datos
  4. Paso 2: duplicados
  5. Paso 3: unifica los textos
  6. Paso 4: valores faltantes
  7. Paso 5: tipos y fechas
  8. Paso 6: valida y documenta
  9. Errores comunes (y qué hacer en su lugar)
  10. Lista de control de limpieza
  11. Resumen
Lo que lograrás en esta lección
  • Perfilar una tabla para descubrir sus errores antes de analizarla.
  • Encontrar y eliminar filas duplicadas sin borrar datos válidos.
  • Unificar textos mal escritos con ESPACIOS, BUSCARX y una tabla de correcciones.
  • Decidir qué hacer con los valores faltantes y convertir fechas guardadas como texto.
  • Validar el resultado y documentar cada cambio en un registro.
📥 Practica esta lección

Limpia la hoja Ventas (200 filas con errores) en una copia y compara tu resultado con Ventas_limpias.

Limpiar datos es corregir o eliminar lo que está duplicado, mal escrito, vacío o en un formato incorrecto, para que los cálculos reflejen la realidad. Es la parte menos vistosa del análisis y una de las que más tiempo consume, pero también la que más errores evita: un análisis brillante sobre datos sucios es un error bien presentado. En esta lección limpiarás la hoja Ventas del archivo de práctica, que trae a propósito los problemas más comunes que encontrarás en tu trabajo.

16 de 200filas tienen algún problema: duplicados, importes vacíos, regiones mal escritas o una fecha como texto
+641,20 USDde diferencia en las ventas totales si no limpias (39.113,40 en lugar de 38.472,20)
15 → 9valores distintos de región: «lima», «Lima », «CDMX», «Bogota»… deberían ser solo 9

Por qué limpiar cambia las conclusiones

Antes de corregir nada, mira lo que pasa si analizas la hoja Ventas tal cual: sumas el importe, traes el país con BUSCARX y resumes. Los errores no solo inflan el total; cambian el ranking de países.

Ventas por país: sin limpiar frente a limpioHoja Ventas (200 filas) frente a Ventas_limpias (197 pedidos) · % de las ventas totales

Sin limpiar, en Excel 5 filas con regiones mal escritas («CDMX», «Bogota», «Nuevo Leon», «Lima ») no encuentran su país: 1.612,40 USD quedan como «No encontrado». Además, los duplicados suman de más. El resultado: Perú parece vender más que México, cuando en realidad es al revés.

Sin limpiar (39.113,40 USD)

Perú38,8%
México36,9%
Colombia20,2%
No encontrado4,1%

Limpio (38.472,20 USD)

México40,5%
Perú38,3%
Colombia21,2%

Con datos sucios, el informe habría dicho que Perú lideraba las ventas. Ninguna fórmula avisa de este error.

El proceso de limpieza, paso a paso

  1. Paso 0Guarda el originalDuplica la hoja (clic derecho › Mover o copiar › Crear una copia). Nunca limpies sobre el único original.
  2. Paso 1Perfila los datosCuenta filas, valores únicos, vacíos y tipos de cada columna para saber qué errores hay.
  3. Paso 2Quita duplicadosPrimero investiga, luego elimina.
  4. Paso 3Unifica textosEspacios, mayúsculas, abreviaturas y tildes.
  5. Paso 4Trata los faltantesRecalcula, imputa, marca o elimina, según el caso.
  6. Paso 5Corrige tipos y fechasNúmeros como número y fechas como fecha.
  7. Paso 6Valida y documentaComprueba las reglas del diccionario y anota cada cambio.

Paso 1: perfila los datos

Perfilar es hacer un diagnóstico rápido de cada columna. En la hoja Ventas (filas 2 a 201), estas fórmulas revelan los cuatro problemas:

PreguntaFórmulaResultadoQué significa
¿Cuántas filas hay?=CONTARA(A2:A201)200Hay más filas…
¿Cuántos pedidos distintos?=CONTARA(UNICOS(A2:A201))197…que pedidos: 3 duplicados
¿Cuántos importes vacíos?=CONTAR.BLANCO(I2:I201)4Faltan 4 importes
¿Cuántas regiones distintas?=CONTARA(UNICOS(C2:C201))13 en ExcelDeberían ser 9
¿Cuántas fechas son fecha?=CONTAR(B2:B201)1991 fecha está guardada como texto

El último truco funciona porque CONTAR solo cuenta números, y una fecha real es un número por dentro. Sobre las regiones: UNICOS de Excel no distingue mayúsculas, así que cuenta «lima» y «Lima» como una sola y devuelve 13. Google Sheets, pandas y SQL sí las distinguen y devuelven 15. En ambos casos sobran valores: abre el filtro de la columna region y verás «CDMX», «Bogota» y otras variantes.

Paso 2: duplicados

Para ver los duplicados antes de borrarlos, agrega una columna auxiliar que marque la segunda aparición de cada identificador:

J2: =CONTAR.SI($A$2:A2; A2)>1

El rango $A$2:A2 crece al copiar la fórmula hacia abajo, así que solo marca VERDADERO cuando el pedido ya apareció más arriba. Filtra por VERDADERO y verás tres filas: P-0026 (La Libertad, 44,90), P-0071 (Ciudad de México, 274,50) y P-0136 (Arequipa, 649,00). Son copias exactas de filas anteriores, así que se eliminan. Sumaban 968,40 USD de más.

La alternativa rápida es Datos › Quitar duplicados, marcando todas las columnas. Ojo: si marcas solo id_pedido y dos filas tienen el mismo ID pero datos distintos, Excel borrará una sin avisarte. Ese caso no es un duplicado: es un problema de identificadores que hay que investigar.

1. Después de eliminar los duplicados de la hoja Ventas, ¿cuántas filas quedan?

  • 200
  • 197
  • 194

Había 200 filas y 197 pedidos únicos. Se eliminan solo las 3 segundas apariciones; las primeras se conservan. Por eso no son 194: borrar las dos copias de cada pedido haría desaparecer ventas reales.

Paso 3: unifica los textos

Las 8 regiones mal escritas tienen tres tipos de error: espacios invisibles («Lima »), mayúsculas («lima», «antioquia») y variantes o abreviaturas («CDMX», «Bogota», «Nuevo Leon»). Excel perdona las mayúsculas en SUMAR.SI.CONJUNTO, BUSCARX y las tablas dinámicas, pero Power Query, pandas y la mayoría de bases de datos no: «lima» y «Lima» serían dos regiones distintas. Unifícalas igual. La solución más segura combina dos herramientas:

  1. Una pequeña tabla de correcciones (por ejemplo, en una hoja nueva llamada Correcciones) con el valor incorrecto en la columna A y el correcto en la B: lima → Lima, CDMX → Ciudad de México, Bogota → Bogotá, Nuevo Leon → Nuevo León, antioquia → Antioquia.
  2. Una fórmula que primero quita espacios y luego busca la corrección; si no la encuentra, deja el texto como estaba:
=BUSCARX(ESPACIOS(C2); Correcciones!$A$2:$A$6; Correcciones!$B$2:$B$6; ESPACIOS(C2))

Después, copia la columna y pégala como valores sobre la original. Comprueba con =CONTARA(UNICOS(...)) que ahora hay 9 regiones.

Cuidado con NOMPROPIO

La tentación es usar =NOMPROPIO(C2) para poner mayúscula inicial. Funciona con «lima», pero convierte «Ciudad de México» en «Ciudad De México» y «CDMX» en «Cdmx», que tampoco coinciden con la tabla Regiones. Las funciones automáticas ayudan, pero la tabla de correcciones es la que garantiza el valor exacto.

2. ¿Qué devuelve =NOMPROPIO("ciudad de méxico")?

  • Ciudad de México
  • Ciudad De México
  • CIUDAD DE MÉXICO

NOMPROPIO pone en mayúscula la primera letra de cada palabra, incluidas «de», «la» o «del». Por eso no sirve para unificar nombres oficiales sin revisión.

Paso 4: valores faltantes

No hay una única forma correcta de tratar un vacío. Depende de por qué falta el dato y de si puedes recuperarlo:

EstrategiaCuándo usarlaRiesgo
RecalcularEl valor se deriva de otras columnasNinguno, si la regla es fiable
Recuperar de la fuentePuedes consultar el sistema originalToma tiempo
Imputar (media, mediana)Pocos vacíos y no se pueden recuperarInventa un valor «típico» que no es real
Marcar y excluirEl dato no se puede estimar con sentidoPierdes filas; documenta cuántas

En Nexo, el diccionario dice que importe = unidades × precio_unitario, así que los 4 vacíos se recalculan. Imputarlos con el promedio (195,29) sería un error grave: el pedido P-0035 es una mochila de 39,90.

=SI(ESBLANCO(I2); G2*H2; I2)

Los cuatro importes recuperados son P-0017 (159,90), P-0035 (39,90), P-0068 (44,90) y P-0099 (3 × 27,50 = 82,50): 327,20 USD que la suma original no contaba.

Paso 5: tipos y fechas

El pedido P-0104 tiene la fecha «13/08/2025» guardada como texto, mientras el resto son fechas reales. Detéctala con =ESNUMERO(B2), que devuelve FALSO solo en esa fila. Para convertirla, extrae día, mes y año del texto:

=FECHA(DERECHA(B2;4); EXTRAE(B2;4;2); IZQUIERDA(B2;2))

También sirve Datos › Texto en columnas, eligiendo el formato DMA en el último paso. Si no corriges esta fila, el pedido desaparece de cualquier resumen por mes y de los filtros de fecha. En herramientas más potentes, Power Query permite hacer todos estos pasos con clics y repetirlos cada vez que llega un archivo nuevo; lo verás en la lección de Power Query en Excel.

3. Un importe está vacío y la fila tiene unidades = 2 y precio_unitario = 54,90. ¿Qué haces?

  • Lo reemplazo por el ticket promedio, 195,29.
  • Elimino la fila porque está incompleta.
  • Lo recalculo: 2 × 54,90 = 109,80.

Si el valor se puede derivar con una regla fiable, se recalcula. Imputar el promedio inventaría 85,49 USD de más, y eliminar la fila borraría una venta real.

Paso 6: valida y documenta

La limpieza termina cuando los datos cumplen las reglas del diccionario. Estas comprobaciones deben dar el resultado esperado:

ReglaComprobaciónEsperado
Un pedido por fila=CONTARA(UNICOS(A2:A198))=CONTARA(A2:A198)VERDADERO (197)
Sin importes vacíos=CONTAR.BLANCO(I2:I198)0
Solo regiones válidas=CONTARA(UNICOS(C2:C198))9
Importe coherente=SUMAPRODUCTO(--(ABS(I2:I198-G2:G198*H2:H198)>0,01))0 filas con diferencia
Total correcto=SUMA(I2:I198)38.472,20

Por último, anota lo que hiciste en un registro de cambios: una tabla con fecha, problema, filas afectadas, acción y responsable. Por ejemplo: «3 filas duplicadas (P-0026, P-0071, P-0136) eliminadas; 968,40 USD». Así, si alguien pregunta por qué tu total no coincide con el del sistema, tienes la respuesta en un minuto.

Lo mismo en Python, en pocas líneas

Si los datos llegan cada semana, conviene automatizar la limpieza. Este es un adelanto de lo que harás en la lección 14 con pandas:

import pandas as pd

df = pd.read_csv("ventas-practica-analisis.csv")
df = df.drop_duplicates()
df["region"] = df["region"].str.strip().replace({
    "lima": "Lima", "CDMX": "Ciudad de México", "Bogota": "Bogotá",
    "Nuevo Leon": "Nuevo León", "antioquia": "Antioquia"})
df["importe"] = df["importe"].fillna((df["unidades"] * df["precio_unitario"]).round(2))
print(len(df), round(df["importe"].sum(), 2))   # 197 38472.2

Errores comunes (y qué hacer en su lugar)

Limpiar directamente sobre el archivo original.

Trabaja en una copia y conserva siempre los datos crudos.

Borrar todas las filas con algún vacío.

Primero intenta recuperar o recalcular; elimina solo si no hay alternativa y documenta cuántas filas.

Rellenar vacíos con el promedio por costumbre.

Imputa solo cuando no exista una regla mejor, y nunca en columnas que se pueden derivar.

Corregir a mano fila por fila sin dejar rastro.

Usa fórmulas o pasos repetibles (tabla de correcciones, Power Query, pandas) y un registro de cambios.

Lista de control de limpieza

4. En la hoja Ventas, =CONTAR(B2:B201) devuelve 199. ¿Qué te indica?

  • Que una de las 200 fechas no es un número, es decir, está guardada como texto.
  • Que hay 199 pedidos únicos.
  • Que falta una fila en la tabla.

CONTAR solo cuenta valores numéricos y las fechas reales lo son. Como hay 200 filas con fecha escrita, la que no se cuenta es texto: la del pedido P-0104.

Ejercicio práctico

Haz una copia de la hoja Ventas y límpiala completa siguiendo los seis pasos. Al terminar, comprueba que obtienes estos cinco resultados:

  1. Número de filas.
  2. Ventas totales.
  3. Ventas y pedidos de Lima.
  4. Número de regiones distintas.
  5. Fecha del pedido P-0104 como fecha real.
Ver solución
  1. 197 filas, tras eliminar las 3 duplicadas (P-0026, P-0071 y P-0136).
  2. 38.472,20 USD. Cuadra así: 39.113,40 (suma original) − 968,40 (duplicados) + 327,20 (importes recalculados) = 38.472,20.
  3. Lima: 7.516,60 USD en 33 pedidos. Antes de limpiar, =SUMAR.SI.CONJUNTO(I2:I201;C2:C201;"Lima") daba 7.252,10: Excel sí incluía «lima» (no distingue mayúsculas), pero no «Lima » con espacio (219,60) ni el importe vacío del pedido P-0068 (44,90). En pandas, que distingue mayúsculas, el error habría sido mayor: 6.792,90.
  4. 9 regiones (antes 13 según UNICOS de Excel; 15 en Google Sheets o pandas).
  5. 13 de agosto de 2025; ahora =ESNUMERO() devuelve VERDADERO y =CONTAR(B2:B198) da 197.

Si alguno no coincide, compara tu hoja con Ventas_limpias usando BUSCARX por id_pedido para encontrar la fila diferente.

Resumen

  • Datos sucios cambian conclusiones: en Nexo, invertían el ranking de países.
  • Perfila antes de limpiar: filas, únicos, vacíos, valores distintos y tipos.
  • Elimina duplicados después de revisarlos y unifica textos con una tabla de correcciones.
  • Recalcula lo que se pueda derivar; imputa solo como último recurso.
  • Valida con las reglas del diccionario y deja un registro de cambios.

En la próxima lección: Estadística descriptiva: media, mediana, desviación y percentiles. Con los datos ya limpios, aprenderás a describir cómo se reparten los importes de los pedidos y a detectar valores atípicos.

🎓 Guarda tu avance y obtén tu certificado gratis

Crea tu cuenta en 30 segundos, marca tus lecciones y descarga el certificado al terminar.

Inscribirme gratis