{ "cells": [ { "cell_type": "markdown", "id": "02bcbfef", "metadata": {}, "source": [ "# Eliminar duplicados\n", "\n", "Un conjunto de datos puede tener duplicados, es decir, registros que tienen los mismos valores en todas sus columnas. Para eliminar estos duplicados, se puede utilizar la función `drop_duplicates()`, por ejemplo, lo puedo usar en el siguiente código:" ] }, { "cell_type": "code", "execution_count": 1, "id": "5dc49a69", "metadata": { "tags": [ "remove-cell" ] }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/jairoantonio/opt/anaconda3/lib/python3.9/site-packages/IPython/core/interactiveshell.py:3444: DtypeWarning: Columns (11) have mixed types.Specify dtype option on import or set low_memory=False.\n", " exec(code_obj, self.user_global_ns, self.user_ns)\n" ] } ], "source": [ "import pandas as pd\n", "\n", "muestra_covid = pd.read_csv('../data/muestra_covid.csv')\n", "geolocalizacion = pd.read_csv('../data/geolocalizacion.csv')" ] }, { "cell_type": "code", "execution_count": 2, "id": "c1065a9c", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Antes de eliminar duplicados: (1323501, 12)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Después de eliminar duplicados: (1323501, 12)\n" ] } ], "source": [ "print(f'Antes de eliminar duplicados: {muestra_covid.shape}')\n", "sin_duplicados_mc = muestra_covid.drop_duplicates()\n", "print(f'Después de eliminar duplicados: {sin_duplicados_mc.shape}')" ] }, { "cell_type": "markdown", "id": "789f9f1d", "metadata": {}, "source": [ "¡No se eliminó ningún caso! Esto se debe a que no existen duplicados en nuestro conjunto de datos.\n", "\n", "Veamos un caso de ejemplo solamente para que puedas ver como funciona la función `drop_duplicates()`.\n", "\n", "Si tenemos el siguiente listado de estudiantes:" ] }, { "cell_type": "code", "execution_count": 3, "id": "62280b31", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
NombreCalificaciones
0Andrea10
1Berenice8
2Carlos9
3Camila7
4Guadalupe6
5Andrea10
6Jorge8
7Berenice9
8Carlos7
\n", "
" ], "text/plain": [ " Nombre Calificaciones\n", "0 Andrea 10\n", "1 Berenice 8\n", "2 Carlos 9\n", "3 Camila 7\n", "4 Guadalupe 6\n", "5 Andrea 10\n", "6 Jorge 8\n", "7 Berenice 9\n", "8 Carlos 7" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "estudiantes= pd.DataFrame(\n", " {'Nombre': [\"Andrea\", \"Berenice\", \"Carlos\", \"Camila\", \"Guadalupe\", \"Andrea\", \"Jorge\", \"Berenice\", \"Carlos\"],\n", " 'Calificaciones': [10, 8, 9, 7, 6, 10, 8, 9, 7]})\n", "estudiantes" ] }, { "cell_type": "markdown", "id": "afcfc792", "metadata": {}, "source": [ "Podemos filtrar un nuevo conjunto de datos eliminando los duplicados:" ] }, { "cell_type": "code", "execution_count": 4, "id": "7b72d6ff", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Estudiantes con duplicados: (9, 2)\n", "Estudiantes sin duplicados: (8, 2)\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
NombreCalificaciones
0Andrea10
1Berenice8
2Carlos9
3Camila7
4Guadalupe6
6Jorge8
7Berenice9
8Carlos7
\n", "
" ], "text/plain": [ " Nombre Calificaciones\n", "0 Andrea 10\n", "1 Berenice 8\n", "2 Carlos 9\n", "3 Camila 7\n", "4 Guadalupe 6\n", "6 Jorge 8\n", "7 Berenice 9\n", "8 Carlos 7" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sin_duplicados_estudiantes = estudiantes.drop_duplicates()\n", "print(f'Estudiantes con duplicados: {estudiantes.shape}')\n", "print(f'Estudiantes sin duplicados: {sin_duplicados_estudiantes.shape}')\n", "sin_duplicados_estudiantes" ] }, { "cell_type": "markdown", "id": "c26ff47c", "metadata": {}, "source": [ "No era sencillo identificar a simple vista (incluso en un conjunto de datos tan pequeño) que `Andrea` estaba duplicada en el conjunto de datos. En un conjunto de datos grande, en particular uno construido a partir de la unión de dos conjuntos de datos, esta función puede ser de muchísima utilidad.\n", "\n", "```{admonition} Sin embargo\n", ":class: warning\n", "Es relevante tener en cuenta que si eliminamos un identificador que pueda filtrar a un caso único (por ejemplo, números de identificación de usuarios), es posible que se eliminen filas de manera errónea.\n", "```\n", "\n", "```{admonition} Importante\n", ":class: tip\n", "Esta función no elimina coincidencias en una columna, para ello podemos utilizar el método `.loc`.\n", "```" ] } ], "metadata": { "jupytext": { "cell_metadata_filter": "-all", "formats": "md:myst", "text_representation": { "extension": ".md", "format_name": "myst", "format_version": 0.13, "jupytext_version": "1.14.0" } }, "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.7" }, "source_map": [ 14, 20, 28, 32, 40, 45, 49, 54 ] }, "nbformat": 4, "nbformat_minor": 5 }