Eliminación de Registros Duplicados

¡Hola! Limpiar duplicados es una de las tareas más comunes e importantes en el análisis de datos. Cuando recolectamos información de bases de datos, formularios o registros de ventas, es muy frecuente que un mismo registro se inserte más de una vez por error humano o del sistema.

A continuación, te presento el problema redactado de forma limpia y su solución explicada paso a paso al estilo de un tutorial profesional.

El Planteamiento del Problema

En tu equipo de análisis de datos han recibido un reporte de ventas en forma de diccionario de Python. Sin embargo, notas de inmediato que hay inconsistencias: el identificador único (ID) de algunos clientes o transacciones se encuentra repetido.

Posees el siguiente conjunto de datos inicial:

data = {
    'ID': [1, 2, 3, 4, 1],
    'Producto': ['Producto A', 'Producto B', 'Producto C', 'Producto D', 'Producto A'],
    'Cantidad': [10, 20, 30, 40, 50],
    'Precio': [100, 200, 300, 400, 100]
}

El Reto

Escribe un script en Python utilizando la librería Pandas para limpiar este conjunto de datos. Debes eliminar los registros que tengan un ID duplicado, asegurándote de usar específicamente la columna 'ID' como tu referencia para identificar cuáles están repetidos. Almacena el resultado final en una variable llamada df_sin_duplicados.

La Solución Paso a Paso

Para resolver este ejercicio de manera estructurada, seguiremos tres pasos fundamentales: la preparación del DataFrame, la aplicación del filtro de limpieza y el análisis del comportamiento de Pandas.

Paso 1: Importar Pandas y construir el DataFrame

Lo primero que debemos hacer es convertir nuestro diccionario nativo de Python en una estructura bidimensional de Pandas (un DataFrame). Esto nos dará acceso a todas las herramientas avanzadas de limpieza de datos.

import pandas as pd

# Datos iniciales
data = {
    'ID': [1, 2, 3, 4, 1],
    'Producto': ['Producto A', 'Producto B', 'Producto C', 'Producto D', 'Producto A'],
    'Cantidad': [10, 20, 30, 40, 50],
    'Precio': [100, 200, 300, 400, 100]
}

# Creamos el DataFrame original
df = pd.DataFrame(data)

Si imprimes df en este punto, verás que el ID 1 aparece en la fila con índice 0 y también en la fila con índice 4.

Paso 2: El superpoder de .drop_duplicates()

Pandas viene equipado con un método diseñado exclusivamente para esta tarea: .drop_duplicates().

Por defecto, si ejecutas df.drop_duplicates() sin ningún parámetro, Pandas buscará filas que sean completamente idénticas en todas sus columnas. En nuestro caso, la fila con índice 0 tiene una cantidad de 10 y la fila 4 tiene una cantidad de 50. Como no todas las columnas coinciden, Pandas no las consideraría duplicadas por sí solo.

Para solucionar esto y cumplir con el requerimiento del ejercicio, debemos usar el parámetro subset. Este parámetro le dice a Pandas: «No mires todo el registro, concéntrate únicamente en la lista de columnas que te indico para decidir si algo es un duplicado».

Paso 3: Código de la solución completa

Aquí tienes el script definitivo que resuelve el problema tal como fue solicitado:

import pandas as pd

# 1. Conjunto de datos provisto
data = {
    'ID': [1, 2, 3, 4, 1],
    'Producto': ['Producto A', 'Producto B', 'Producto C', 'Producto D', 'Producto A'],
    'Cantidad': [10, 20, 30, 40, 50],
    'Precio': [100, 200, 300, 400, 100]
}

# 2. Construcción del DataFrame inicial
df = pd.DataFrame(data)

# 3. Eliminación de registros duplicados basándonos en la columna ID
df_sin_duplicados = df.drop_duplicates(subset=['ID'])

# 4. Comprobación del resultado
print("--- DataFrame Limpio (Sin Duplicados) ---")
print(df_sin_duplicados)

Explicación Lógica del Resultado

Cuando ejecutes el script anterior, la salida que obtendrás en tu terminal será la siguiente:

--- DataFrame Limpio (Sin Duplicados) ---
   ID    Producto  Cantidad  Precio
0   1  Producto A        10     100
1   2  Producto B        20     200
2   3  Producto C        30     300
3   4  Producto D        40     400

¿Por qué se eliminó la fila 4 y se conservó la fila 0?

Bajo el capó, .drop_duplicates() trabaja con un tercer parámetro implícito llamado keep (conservar), cuyo valor por defecto es 'first' (primero).

  1. El algoritmo empieza a recorrer la columna ID desde arriba hacia abajo.
  2. Encuentra el primer ID igual a 1 en el índice 0 y lo registra.
  3. Avanza por los índices 1, 2 y 3 guardando los valores únicos.
  4. Al llegar al índice 4, detecta que el ID vuelve a ser 1. Como keep='first', Pandas dice: «Este ya lo tengo registrado antes, por lo tanto, descarto esta fila por completo».

Si en algún proyecto real de análisis de datos quisieras conservar la última versión registrada (por ejemplo, la actualización de una venta), podrías cambiar el comportamiento añadiendo el parámetro de esta forma: df.drop_duplicates(subset=['ID'], keep='last'). Pero para los propósitos de este ejercicio estándar, la solución directa cumple perfectamente con aislar tus datos limpios en la variable df_sin_duplicados.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *