Eliminación de duplicados con drop_duplicates en Pandas

Clase 32 de 38Curso de Ingeniería de Datos con Python

Contenido del curso

Web scraping

Pandas

Resumen

Eliminar duplicados es clave para mantener un data set confiable y evitar que ciertos registros tengan un peso no justificado en el análisis dentro del pipeline. Aquí verás cómo identificar, investigar y remover valores duplicados en Jupyter Notebook con Pandas, tal como se definió en el paso ocho: eliminar duplicados de la receta y el script de automatización.

¿Por qué identificar y eliminar duplicados en el pipeline de datos?

Encontrar duplicados permite depurar resultados que, aunque parezcan distintos, representan el mismo contenido. En el caso descrito, el criterio de inclusión en el scraper fue la URL. Dos filas tenían títulos idénticos, pero URLs distintas que apuntaban al mismo artículo. Por eso, aunque el script no estaba mal, los duplicados debían eliminarse para asegurar consistencia.

  • Evita sesgos al contar artículos repetidos.
  • Mantiene un ID único por registro.
  • Limpia el cuerpo del artículo de saltos de línea.
  • Preserva un título trabajado, obtenido del artículo o generado desde la URL.

¿Cómo detectar e investigar duplicados en Pandas?

La primera revisión consiste en saber dónde debería haber valores únicos y dónde podría haber repetidos. Con Pandas, la función value_counts() ayuda a validar rápidamente columnas clave como URL, cuerpo y título.

¿Dónde revisar duplicados con value_counts?

Se espera que URL sea única y que body sea muy difícil de repetir. Sin embargo, en title se detectó un caso repetido: «Diez trucos para convertirte en un master de Instagram».

# Exploración rápida de duplicados universal_url_counts = df['universal_url'].value_counts() body_counts = df['body'].value_counts() title_counts = df['title'].value_counts()
  • URL: todos con frecuencia 1, como se espera.
  • Body: también con frecuencia 1 en este caso.
  • Title: aparece una frecuencia 2 para un título específico.

¿Cómo filtrar un título repetido con una máscara booleana?

Para investigar, se aplicó una máscara booleana sobre title para ver los registros implicados. Así se confirmó que había dos filas con el mismo título y URLs diferentes, que llevan al mismo contenido.

# Inspección puntual de un título repetido titulo = 'Diez trucos para convertirte en un master de Instagram' mask = df['title'] == titulo df_duplicado = df[mask]
  • Se verificó que el scraper seleccionaba por URL (criterio correcto).
  • Aun así, ambas URLs apuntaban al mismo artículo.

¿Cómo eliminar duplicados con drop_duplicates y validar la tabla final?

Para resolverlo, Pandas ofrece drop_duplicates, que permite indicar en qué subset comparar duplicados y qué registro keep (primero o último) conservar. Aquí bastó con comparar por title y quedarse con el primero, aplicando el cambio in place.

¿Qué parámetros usar en drop_duplicates?

# Eliminación de duplicados con base en el título df.drop_duplicates(subset=['title'], keep='first', inplace=True)
  • subset: define la columna para comparar duplicados, aquí title.
  • keep: puede ser 'first' o 'last'; en este caso, 'first' es suficiente.
  • inplace: aplica los cambios directamente.

Tras eliminar duplicados, la tabla final contiene:

  • ID único por artículo.
  • Cuerpo del artículo limpio, sin saltos de línea.
  • Títulos trabajados: extraídos del artículo o generados desde la URL.
  • ID del periódico.
  • Host único que representa cada sitio que compone el universal.
  • Análisis numérico: conteo de tokens en el título y en el cuerpo.

Con esto, el conjunto queda listo para continuar con análisis descriptivo y siguientes pasos del pipeline.

¿Te gustaría comentar cómo gestionas duplicados cuando las URLs cambian pero el contenido es el mismo?