Python

Eliminar registros duplicados en pandas

Un problema habitual en los conjuntos de datos es la existencia de registros duplicados. La duplicidad puede ser del registro completo o solamente de unos elementos. Por ejemplo, se ha registrado dos veces la misma operación con diferente identificador. Saber cómo eliminar estos registros duplicados es imprescindible para evitar posibles errores en los análisis posteriores. En esta se explicarán los métodos disponibles en los dataframes para la eliminación de registros duplicados en pandas.

Creación de un dataframe de ejemplo

Para poder eliminar datos duplicados de un dataframe en primer lugar se ha de crear un conjunto de datos con este problema. Esto es lo que se crea con las siguientes líneas de código

import pandas as pd

data = {'id': [1, 2, 3, 4, 5, 6, 7, 7],
        'first_name': ['Sigrid', 'Kennedy', 'Theodoric', 'Sigrid', 'Kennedy', 'Beatrix', 'Olimpia', 'Olimpia'],
        'last_name': ['Mannock', 'Donnell', 'Rivers', 'Mannock', 'Donnell', 'Parlett', 'Guenther', 'Guenther'],
        'age': [27, 31, 36, 27, 53, 48, 36, 36],
        'amount': [7.17, 1.90, 1.11, 7.17, 1.41, 6.69, 4.62, 4.62]}

df = pd.DataFrame(data, columns = ['id', 'first_name', 'last_name', 'age', 'amount'])
df
 id first_name last_name age amount
0 1 Sigrid  Mannock  27 7.17
1 2 Kennedy  Donnell  31 1.90
2 3 Theodoric Rivers  36 1.11
3 4 Sigrid  Mannock  27 7.17
4 5 Kennedy  Donnell  53 1.41
5 6 Beatrix  Parlett  48 6.69
6 7 Olimpia  Guenther 36 4.62
7 7 Olimpia  Guenther 36 4.62

Eliminación de los registros duplicados en pandas

En le conjunto de datos lo primero que se puede apreciar es que los dos últimos registros son idénticos. El método duplicated() del dataframe muestra esto de forma clara:

df.duplicated()
0    False
1    False
2    False
3    False
4    False
5    False
6    False
7     True

Ahora simplemente utilizando el método drop_duplicates() se puede eliminar estos registros:

df = df.drop_duplicates()
df
 id first_name last_name age amount
0 1 Sigrid  Mannock  27 7.17
1 2 Kennedy  Donnell  31 1.90
2 3 Theodoric Rivers  36 1.11
3 4 Sigrid  Mannock  27 7.17
4 5 Kennedy  Donnell  53 1.41
5 6 Beatrix  Parlett  48 6.69
6 7 Olimpia  Guenther 36 4.62

Obteniéndose un nuevo dataframe sin duplicados.

df.duplicated()
0    False
1    False
2    False
3    False
4    False
5    False
6    False

Eliminación de los registros duplicados parciales en pandas

Los duplicados pueden ser también parciales. Un ejemplo típico es un mismo registro que se ha guardado con dos identificadores diferentes. En el conjunto de datos de ejemplo esta situación se puede ver en los registros 1 y 4. Para comprobar esto se le puede indicar al método duplicated() que solamente unas columnas.

df.duplicated(df.columns[~df.columns.isin(['id'])])
0    False
1    False
2    False
3     True
4    False
5    False
6    False

Análogamente al paso anterior se puede eliminar este tipos de registros utilizando el método drop_duplicates() con las columnas. En esta ocasión una propiedad interesante de este método es keep mediante la cual se puede indicas si se conserva la primera o ultima ocurrencia. Por defecto conserva la primera, peros se puede indicar que sea la úiltima:

df = df.drop_duplicates(df.columns[~df.columns.isin(['id'])],
                        keep='first')
df
 id first_name last_name age amount
0 1 Sigrid  Mannock  27 7.17
1 2 Kennedy  Donnell  31 1.90
2 3 Theodoric Rivers  36 1.11
4 5 Kennedy  Donnell  53 1.41
5 6 Beatrix  Parlett  48 6.69
6 7 Olimpia  Guenther 36 4.62

Reducción de las ocurrencias

Otra situación puede ser que un mismo cliente aparezca dos veces en la tabla y solamente se desee un registro por cliente. Esto se puede solucionar filtrando los registros solamente por el nombre y apellido. En esta situación se puede asumir que se desea únicamente el último registro por ser el más actualizado.

df.drop_duplicates(['first_name', 'last_name'], keep='last')
 id first_name last_name age amount
0 1 Sigrid  Mannock  27 7.17
2 3 Theodoric Rivers  36 1.11
4 5 Kennedy  Donnell  53 1.41
5 6 Beatrix  Parlett  48 6.69
6 7 Olimpia  Guenther 36 4.62

Conclusiones

En esta entrada se ha visto cómo utilizar los métodos duplicated() y drop_duplicates() para eliminar los registros duplicados en pandas. Estas operaciones básicas son clave para garantizar la calidad de los conjuntos de datos y los análisis que se realizan con los mismos.

Imágenes: Pixabay (ulleo)

¿Te ha parecido de utilidad el contenido?

Daniel Rodríguez

Share
Published by
Daniel Rodríguez
Tags: Pandas

Recent Posts

El bestiario de los indicadores económicos absurdos: El zoo patrio

Cualquier país desarrollado tiene sus propios indicadores folclóricos. España, por motivos que tienen mucho que…

4 días ago

Por qué el banco te ofrece un 3% TAE y no es lo que parece

Entras a la web de tu banco. En la página principal, un banner llamativo: “Depósito…

6 días ago

Analytics Lane lanza la versión 1.3 del laboratorio con nuevas herramientas de evaluación de modelos y utilidades prácticas

Seguimos ampliando el laboratorio de Analytics Lane con el lanzamiento de la versión 1.3, disponible…

1 semana ago

Augurios deportivos y portadas malditas, o cuando The Economist predice mejor al revés – El bestiario de los indicadores económicos absurdos (parte 3)

Cerramos la serie internacional con la categoría más estrambótica de todas: indicadores que predicen el…

2 semanas ago

El Binning en Credit Scoring: El Arte de Discretizar Variables

Si el WOE y el IV son la base matemática del credit scoring, el binning…

2 semanas ago

Analytics Lane lanza la versión 1.2 del laboratorio con nuevas herramientas de ajuste de curvas y cálculo matricial

Seguimos iterando sobre el laboratorio de Analytics Lane y lanzamos la versión 1.2, disponible en:https://www.analyticslane.com/lab/es…

2 semanas ago

This website uses cookies.