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.
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.
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.
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