- analiticas
- Posts
- 3 metodi per verificare i duplicati con pandas
3 metodi per verificare i duplicati con pandas
Controlla l'unicità dei valori del tuo dataframe
Quando lavoriamo con i dati, una delle prime verifiche che dobbiamo fare è controllare se ci sono valori duplicati.
In questa micro-lezione vedremo come utilizzare is_unique
, nunique()
e duplicated()
.
Il programma della micro-lezione
La libreria e i dataframe
Importiamo la libreria pandas
:
import pandas as pd
Creiamo adesso due dataframe: uno contenente solo valori unici e uno con dei duplicati.
df_unici = pd.DataFrame({
'id': [1, 2, 3, 4],
'nome': ['Anna', 'Marco', 'Giulia', 'Paolo'],
'email': ['[email protected]', '[email protected]', '[email protected]', '[email protected]']
})
id | nome | |
---|---|---|
1 | Anna | |
2 | Marco | |
3 | Giulia | |
4 | Paolo |
df_duplicati = pd.DataFrame({
'id': [1, 2, 2, 3],
'nome': ['Anna', 'Marco', 'Marco', 'Giulia'],
'email': ['[email protected]', '[email protected]', '[email protected]', '[email protected]']
}) (
id | nome | |
---|---|---|
1 | Anna | |
2 | Marco | |
2 | Marco | |
3 | Giulia |
Usiamo is_unique
La proprietà is_unique
restituisce True
se tutti i valori di una Serie sono unici, False
se ci sono duplicati.
Proviamo a verificare se la colonna id
del dataframe df_unici
contiene solo valori unici:
df_unici['id'].is_unique
Il risultato sarà:
True
Come previsto, la colonna id
non ha duplicati.
Proviamo adesso a fare la stessa cosa con il dataframe df_duplicati
:
df_duplicati['id'].is_unique
Questa volta il risultato sarà:
False
Attenzione!
is_unique
considera i valori nulli come diversi tra loro, come se avessero un’“identità” diversa gli uni dagli altri.
Quindi se avessimo una colonna composta da soli valori nulli, is_unique
darebbe True
.
Usiamo nunique()
A differenza di is_unique
che ci dice semplicemente se una colonna contiene valori unici o meno, il punto di forza di nunique()
consiste del dirci quanti valori di una colonna sono unici.
Proviamo a vedere quanti valori unici ci sono nella colonna id
del dataframe che contiene duplicati:
df_duplicati['id'].nunique()
Ed ecco qui il risultato:
3
Attenzione!
nunique()
ignora i valori nulli. Quindi, ci darà il numero dei valori unici, escludendo dal conteggio i valori nulli.
Qualora volessi includerli, dovresti specificare: nunique(dropna=False)
.
Usiamo duplicated()
Un altro strumento che possiamo usare per identificare eventuali duplicati nel nostro dataframe è duplicated().
duplicated()
può essere applicato al dataframe nel suo intero o ad una selezione di colonne e restituisce una Serie booleana che indica quali righe sono duplicate.
Vediamo come fare:
df_duplicati['id'].duplicated()
In questo esempio stiamo controllando quali valori della colonna id
del dataframe df_duplicati
non sono unici. Ecco il risultato:
0 False
1 False
2 True
3 False
Name: id, dtype: bool
Il valore della terza riga (indicizzata come 2 dato che Python comincia a contare da 0) è un duplicato.
E se volessimo controllare tutto il dataframe e non solo una colonna in particolare?
Ci basta rimuovere la menzione della colonna! Ecco come:
df_duplicati.duplicated()
Ed ecco qui il risultato:
0 False
1 False
2 True
3 False
dtype: bool
La terza riga di df_duplicati
contiene un valore duplicato in tutte le colonne.
Se solo una colonna del dataframe avesse duplicati, il comando duplicated()
applicato a tutto il dataframe darebbe un risultato uguale a False
.
Infatti, se non specifichiamo le colonne, ogni riga viene valutata nella sua interezza.
Immaginiamo adesso di voler contare le righe che contengono duplicati. Ci basta fare così:
df_duplicati.duplicated().sum()
Perché si fa la somma? Perché True
viene interpretato come 1
e False
come 0
.
Di conseguenza, la somma corrisponderà al numero delle righe dove duplicated()
equivale a True
. Avevamo usato lo stesso metodo per contare i valori nulli in una micro-lezione precedente.
Attenzione!
duplicated()
considera i valori nulli come uguali tra loro, quindi essi saranno etichettati come duplicati.
Prestazioni su dataset grandi
Se dobbiamo lavorare con dataset di grandi dimensioni, conoscere l’impatto che ognuno di questi metodi ha sulla performance del codice diventa importantissimo.
is_unique
è molto dispendioso. Infatti funziona comparando ogni valore con tutti gli altri della colonna.nunique()
è il metodo più efficace perché si limita a contare i valori unici senza dover tenere traccia di dove siano.duplicated()
è generalmente dispendioso. Infatti, processa la posizione dei valori duplicati.
Di conseguenza per contare i valori duplicati su dataset di dimensioni molto grandi, possiamo confrontare il numero di righe di una colonna e quello dei suoi valori unici.
Ecco un esempio:
tutti = df_duplicati['id'].count()
unici = df_duplicati['id'].nunique()
tutti - unici
E nel nostro caso il risultato sarà:
1
Nell’esempio:
Abbiamo creato una variable chiamata
tutti
corrispondete al conteggio di tutte le righe della colonnaid
(esclude quelle con eventuali valori nulli).Abbiamo creato una seconda variabile chiamata
unici
che corrisponde al numero di valori unici della colonna.Abbiamo sottratto
unici
datutti
e abbiamo scoperto che la colonna contiene un valore duplicato.
Se vuoi imparare la data analysis con micro-lezioni che vanno dritto al sodo, iscriviti alla newsletter:
Alla prossima micro-lezione 👋