logo oujood
🔍

Supprimer les doublons dans Pandas

Les doublons sont fréquents dans les données réelles : imports répétés, jointures mal maîtrisées, saisies multiples. Pandas fournit deux méthodes complémentaires pour les détecter et les éliminer avec précision.

OUJOOD.COM

Qu'est-ce qu'un doublon dans Pandas ?

Par défaut, Pandas considère qu'une ligne est un doublon si elle est identique à une autre sur toutes ses colonnes. Mais en pratique, un doublon peut aussi être partiel : deux commandes avec le même identifiant client et la même date, mais des montants différents à cause d'une erreur de saisie. La définition du doublon dépend de votre contexte métier.

Détecter les doublons avec duplicated()

duplicated() retourne une Series booléenne : True pour chaque ligne considérée comme un doublon, False sinon. Par défaut, la première occurrence est marquée False (non-doublon) et les suivantes True.

  📋 Copier le code

import pandas as pd

data = {
    "nom":    ["Alice", "Bob", "Alice", "Clara", "Bob",   "Alice"],
    "ville":  ["Paris", "Lyon", "Paris", "Marseille", "Lyon", "Bordeaux"],
    "score":  [88,      74,     88,      95,          74,     88]
}
df = pd.DataFrame(data)

# Lignes dupliquées sur toutes les colonnes
print(df.duplicated())

# Compter le nombre total de doublons
print(df.duplicated().sum())

# Afficher les lignes dupliquées
print(df[df.duplicated()])

# Marquer TOUTES les occurrences (y compris la première)
print(df[df.duplicated(keep=False)])

keep=False marque toutes les occurrences d'un doublon, pas seulement les répétitions. C'est utile pour les inspecter avant de décider laquelle garder. keep="last" fait l'inverse du comportement par défaut : c'est la dernière occurrence qui est considérée comme non-doublon.

Supprimer les doublons avec drop_duplicates()

drop_duplicates() retourne un nouveau DataFrame sans les lignes dupliquées. Les mêmes paramètres que duplicated() s'appliquent : keep pour choisir quelle occurrence conserver, subset pour ne comparer que sur certaines colonnes.

  📋 Copier le code

import pandas as pd

data = {
    "id":      [1,       2,      1,      3,      2],
    "nom":     ["Alice", "Bob",  "Alice","Clara", "Bob"],
    "version": ["v1",    "v1",   "v2",   "v1",   "v1"]
}
df = pd.DataFrame(data)

# Supprimer les doublons complets (toutes colonnes identiques)
print(df.drop_duplicates())

# Garder la dernière occurrence plutôt que la première
print(df.drop_duplicates(keep="last"))

# Dédoublonner sur la colonne "id" seulement
# → garde la première ligne pour chaque id unique
print(df.drop_duplicates(subset=["id"]))

subset=["id"] traite deux lignes comme des doublons si elles ont le même id, quelle que soit la valeur des autres colonnes. Dans l'exemple, les lignes 0 et 2 ont toutes deux id=1 — Pandas garde la première (Alice v1) et supprime la seconde (Alice v2). C'est le comportement à choisir quand vous dédoublonnez sur une clé métier.

Dédoublonner en gardant la valeur la plus récente

Un cas fréquent : un fichier exporté contient plusieurs versions d'un même enregistrement à des dates différentes, et vous ne voulez garder que la plus récente. La combinaison tri + dédoublonnage gère ça proprement.

  📋 Copier le code

import pandas as pd

data = {
    "id_client": [101,          101,          102,          102,          103],
    "date_maj":  ["2026-01-15", "2026-03-10", "2026-02-01", "2026-04-05", "2026-01-20"],
    "statut":    ["actif",      "suspendu",   "actif",      "résilié",    "actif"]
}
df = pd.DataFrame(data)
df["date_maj"] = pd.to_datetime(df["date_maj"])

# Trier par date décroissante, puis garder la première occurrence par client
df_dedup = (
    df.sort_values("date_maj", ascending=False)
      .drop_duplicates(subset=["id_client"], keep="first")
      .sort_values("id_client")
      .reset_index(drop=True)
)
print(df_dedup)

Le tri ascending=False place la date la plus récente en premier. drop_duplicates(keep="first") garde cette première ligne — qui est la plus récente. Le second tri et reset_index(drop=True) nettoient le résultat pour une présentation ordonnée. Cette séquence est un pattern courant en préparation de données.

Par carabde | Mis à jour le 26 avril 2026