Les Pandas déposent des lignes en double

Suraj Joshi 30 janvier 2023
  1. DataFrame.drop_duplicates() Syntaxe
  2. Supprimer les lignes en double en utilisant la méthode DataFrame.drop_duplicates()
  3. Mettre keep='last' dans la méthode drop_duplicates()
Les Pandas déposent des lignes en double

Ce tutoriel explique comment nous pouvons supprimer tous les enregistrements en double d’un Pandas DataFrame en utilisant la méthode DataFrame.drop_duplicates().

DataFrame.drop_duplicates() Syntaxe

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

Il renvoie un DataFrame en supprimant toutes les lignes répétées dans le DataFrame.

Supprimer les lignes en double en utilisant la méthode 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")

Production :

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 

Il supprime les lignes ayant les mêmes valeurs pour toutes les colonnes. Par défaut, seules les lignes ayant les mêmes valeurs pour chaque colonne dans le DataFrame sont considérées comme des doublons. Dans le DataFrame df_with_duplicates, la première et la cinquième ligne ont les mêmes valeurs pour toutes les colonnes, s que la cinquième ligne est supprimée.

Définissez le paramètre subset pour supprimer les doublons en fonction de colonnes spécifiques uniquement

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")

Production :

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 

Ici, nous passons Name comme un argument subset à la méthode drop_duplicates(). Les quatrième et cinquième lignes sont supprimées car elles ont la même valeur de la colonne Name que la première colonne.

Mettre keep='last' dans la méthode 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")

Production :

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 

Il supprime toutes les lignes sauf la dernière ligne ayant la même valeur que la colonne Name.

Nous définissons keep=False pour supprimer toutes les lignes ayant la même valeur d’une colonne.

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")

Résultat :

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 

Il supprime la première, la cinquième et la sixième ligne car elles ont toutes la même valeur pour la colonne Name.

Auteur: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

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

LinkedIn

Article connexe - Pandas DataFrame Row