Pandas elimina le righe duplicate

Suraj Joshi 30 gennaio 2023
  1. DataFrame.drop_duplicates() Sintassi
  2. Rimuovere le righe duplicate utilizzando il metodo DataFrame.drop_duplicates()
  3. Imposta keep='last' nel metodo drop_duplicates()
Pandas elimina le righe duplicate

Questo tutorial spiega come possiamo rimuovere tutte le righe duplicate da un Pandas DataFrame usando il metodo DataFrame.drop_duplicates().

DataFrame.drop_duplicates() Sintassi

DataFrame.drop_duplicates(subset=None, keep="first", inplace=False, ignore_index=False)

Restituisce un DataFrame rimuovendo tutte le righe ripetute nel DataFrame.

Rimuovere le righe duplicate utilizzando il metodo DataFrame.drop_duplicates()

import pandas as pd

df_with_duplicates = pd.DataFrame(
    {
        "Id": [302, 504, 708, 103, 303, 302],
        "Name": ["Watch", "Camera", "Phone", "Shoes", "Watch", "Watch"],
        "Cost": ["300", "400", "350", "100", "300", "300"],
    }
)

df_without_duplicates = df_with_duplicates.drop_duplicates()

print("DataFrame with duplicates:")
print(df_with_duplicates, "\n")

print("DataFrame without duplicates:")
print(df_without_duplicates, "\n")

Produzione:

DataFrame with duplicates:
    Id    Name Cost
0  302   Watch  300
1  504  Camera  400
2  708   Phone  350
3  103   Shoes  100
4  303   Watch  300
5  302   Watch  300 

DataFrame without duplicates:
    Id    Name Cost
0  302   Watch  300
1  504  Camera  400
2  708   Phone  350
3  103   Shoes  100
4  303   Watch  300 

Rimuove le righe con gli stessi valori per tutte le colonne. Per impostazione predefinita, solo le righe con gli stessi valori per ogni colonna nel DataFrame sono considerate duplicate. Nel DataFrame df_with_duplicates, la prima e la quinta riga hanno gli stessi valori per tutte le colonne, quindi la quinta riga viene rimossa.

Imposta il parametro subset per rimuovere i duplicati solo in base a colonne specifiche

import pandas as pd

df_with_duplicates = pd.DataFrame(
    {
        "Id": [302, 504, 708, 103, 303, 302],
        "Name": ["Watch", "Camera", "Phone", "Shoes", "Watch", "Watch"],
        "Cost": ["300", "400", "350", "100", "300", "300"],
    }
)

df_without_duplicates = df_with_duplicates.drop_duplicates(subset=["Name"])

print("DataFrame with duplicates:")
print(df_with_duplicates, "\n")

print("DataFrame without duplicates:")
print(df_without_duplicates, "\n")

Produzione:

DataFrame with duplicates:
    Id    Name Cost
0  302   Watch  300
1  504  Camera  400
2  708   Phone  350
3  103   Shoes  100
4  303   Watch  300
5  302   Watch  300 

DataFrame without duplicates:
    Id    Name Cost
0  302   Watch  300
1  504  Camera  400
2  708   Phone  350
3  103   Shoes  100 

Qui, passiamo Name come argomento subset al metodo drop_duplicates(). La quarta e la quinta riga vengono rimosse poiché hanno lo stesso valore della colonna Name della prima colonna.

Imposta keep='last' nel metodo drop_duplicates()

import pandas as pd

df_with_duplicates = pd.DataFrame(
    {
        "Id": [302, 504, 708, 103, 303, 302],
        "Name": ["Watch", "Camera", "Phone", "Shoes", "Watch", "Watch"],
        "Cost": ["300", "400", "350", "100", "300", "300"],
    }
)

df_without_duplicates = df_with_duplicates.drop_duplicates(subset=["Name"], keep="last")

print("DataFrame with duplicates:")
print(df_with_duplicates, "\n")

print("DataFrame without duplicates:")
print(df_without_duplicates, "\n")

Produzione:

DataFrame with duplicates:
    Id    Name Cost
0  302   Watch  300
1  504  Camera  400
2  708   Phone  350
3  103   Shoes  100
4  303   Watch  300
5  302   Watch  300 

DataFrame without duplicates:
    Id    Name Cost
1  504  Camera  400
2  708   Phone  350
3  103   Shoes  100
5  302   Watch  300 

Rimuove tutte le righe tranne l’ultima con lo stesso valore della colonna Name.

Impostiamo keep=False per rimuovere tutte le righe che hanno lo stesso valore di qualsiasi colonna.

import pandas as pd

df_with_duplicates = pd.DataFrame(
    {
        "Id": [302, 504, 708, 103, 303, 302],
        "Name": ["Watch", "Camera", "Phone", "Shoes", "Watch", "Watch"],
        "Cost": ["300", "400", "350", "100", "300", "300"],
    }
)

df_without_duplicates = df_with_duplicates.drop_duplicates(subset=["Name"], keep=False)

print("DataFrame with duplicates:")
print(df_with_duplicates, "\n")

print("DataFrame without duplicates:")
print(df_without_duplicates, "\n")

Produzione:

DataFrame with duplicates:
    Id    Name Cost
0  302   Watch  300
1  504  Camera  400
2  708   Phone  350
3  103   Shoes  100
4  303   Watch  300
5  302   Watch  300 

DataFrame without duplicates:
    Id    Name Cost
1  504  Camera  400
2  708   Phone  350
3  103   Shoes  100 

Rimuove la prima, la quinta e la sesta riga poiché hanno tutte lo stesso valore per la colonna Name.

Autore: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn

Articolo correlato - Pandas DataFrame Row