- 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 pdCreiamo 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_uniqueIl 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_uniqueQuesta volta il risultato sarà:
FalseAttenzione!
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:
3Attenzione!
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: boolIl 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 - uniciE nel nostro caso il risultato sarà:
1Nell’esempio:
Abbiamo creato una variable chiamata
tutticorrispondete al conteggio di tutte le righe della colonnaid(esclude quelle con eventuali valori nulli).Abbiamo creato una seconda variabile chiamata
uniciche corrisponde al numero di valori unici della colonna.Abbiamo sottratto
unicidatuttie 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 👋