Une commande peut avoir plusieurs lignes légitimes
Imaginons un fichier de lignes de commande. La commande B possède deux lignes numérotées 1 et 2 : elles sont toutes deux légitimes. La commande A comporte deux occurrences de la ligne 1 avec des montants différents : il faut les examiner. Si vous dédupliquez uniquement sur le numéro de commande, vous perdrez une ligne valide de B. Si vous comparez toutes les colonnes, vous ne signalerez pas les deux versions de A.
Dans cet exemple, la clé choisie est donc la paire commande, ligne. Ce choix ne convient pas automatiquement à un autre système : un retour, une révision ou une livraison partielle peut modifier la définition. Écrivez la phrase « une ligne représente… » avant de choisir vos colonnes.
Afficher les conflits avant toute suppression
Le petit jeu ci-dessous contient aussi deux lignes dont la commande est absente. Nous les gardons volontairement pour voir ce qui se passe. L’appel duplicated avec keep=False marque toutes les occurrences appartenant à un groupe répété sur la clé retenue. Il sert ici à préparer une liste d’examen.
import pandas as pd
df = pd.DataFrame({
"commande": ["A", "A", "B", "B", None, None],
"ligne": [1, 1, 1, 2, 1, 1],
"montant": [10, 12, 5, 8, 4, 9],
})
cle = ["commande", "ligne"]
conflits = df.duplicated(subset=cle, keep=False)
assert conflits.tolist() == [True, True, False, False, True, True]
a_examiner = df.loc[conflits].copy()Les montants ne participent pas à la clé : c’est précisément ce qui permet de rapprocher les versions qui divergent. Conservez ce tableau d’examen avant de poursuivre ; il explique quelles lignes seront affectées.
Choisir first, last ou aucune occurrence
drop_duplicates peut conserver la première occurrence, la dernière ou éliminer toutes les occurrences d’une clé répétée. Ces politiques ne signifient pas « la bonne version », « la plus récente » ou « la valeur correcte ». Première et dernière se rapportent à l’ordre actuel des lignes. La documentation de drop_duplicates définit ces options.
derniere = df.drop_duplicates(subset=cle, keep="last")
assert derniere["montant"].tolist() == [12, 5, 8, 9]
sans_conflit = df.drop_duplicates(subset=cle, keep=False)
assert sans_conflit["montant"].tolist() == [5, 8]Le second résultat ne répare pas A : il l’écarte entièrement, avec les clés absentes répétées. Garder la dernière ligne peut être une règle acceptable pour un exemple, mais elle doit correspondre à une information fiable dans le flux réel.
Rendre le choix de version explicite
Si le métier demande la modification la plus récente, utilisez un horodatage correctement interprété et définissez comment départager deux lignes portant la même date. L’ordre d’arrivée dans un CSV n’est pas nécessairement l’ordre des modifications. Un tri qui semble naturel peut donc produire un résultat différent de la règle souhaitée.
Avant de dédupliquer, contrôlez les dates absentes, les fuseaux et les égalités. Si vous ne disposez d’aucun critère fiable pour départager deux montants, conservez le conflit dans une sortie séparée plutôt que de sélectionner une occurrence au hasard. Le nettoyage doit rendre l’incertitude visible, pas la faire disparaître derrière une ligne de code.
Les clés absentes demandent une politique propre
Dans notre jeu vérifié, deux valeurs None dans commande, associées à la même ligne 1, sont reconnues comme répétées pour la déduplication. Cela ne prouve pas qu’elles décrivent la même commande inconnue. Une absence d’identifiant peut correspondre à plusieurs objets différents. Il faut distinguer le comportement de l’outil et l’interprétation métier.
Une politique possible est d’isoler d’abord toute clé incomplète avec un contrôle isna sur les colonnes de clé, puis de dédupliquer seulement les lignes dont la clé est renseignée. Documentez aussi les chaînes vides et les espaces : ils ne sont pas automatiquement la même chose qu’une absence. La documentation des données manquantes décrit les représentations à examiner.
Conserver un bilan qui explique le résultat
Pour chaque nettoyage, gardez le nombre de lignes entrantes, les clés incomplètes isolées, les groupes en conflit et les lignes retenues. Comparez aussi les sommes avant et après, sans supposer qu’elles doivent rester identiques : supprimer une double facturation et supprimer une version corrigée n’ont pas le même effet. Le bilan doit expliquer les variations observées.
Les assertions de cette page ont été exécutées avec pandas 2.2.3. Les méthodes et politiques ont été confrontées aux références actuelles de duplicated et drop_duplicates. Avant cette étape, sécurisez l’import grâce au guide read_csv. Une référence dont les zéros ou les valeurs NA ont déjà changé peut créer de faux rapprochements que la déduplication ne saura pas détecter.
PASSEZ À VOTRE ÉCHANTILLON
Les colonnes sont-elles bien lues ?
Comparez quatre séparateurs et repérez les lignes irrégulières. L’analyse reste dans votre navigateur.
Essayer le diagnostic ↗Vos questions, concrètement
Pourquoi drop_duplicates() ne retire-t-il pas deux versions du même objet ?
Sans subset, les colonnes participent toutes à la comparaison. Si le montant change, les lignes ne sont plus identiques. Définissez les colonnes qui identifient l’objet métier.
keep="last" garde-t-il la date la plus récente ?
Non. Il garde la dernière occurrence dans l’ordre actuel des lignes. Une règle chronologique demande un tri et un critère de départage explicites.
Deux identifiants manquants représentent-ils le même objet ?
Pas nécessairement. Le traitement technique des valeurs manquantes ne remplace pas une politique métier. Isolez les clés incomplètes si leur identité ne peut pas être établie.
REMONTREZ AUX DOCUMENTATIONS
Sources et vérification
Les exemples et explications sont rédigés pour ce guide. Les références ci-dessous documentent les fonctions et comportements mentionnés.
- pandas — DataFrame.duplicated ↗Consulté le 2026-10-29
- pandas — DataFrame.drop_duplicates ↗Consulté le 2026-10-29
- pandas — données manquantes ↗Consulté le 2026-10-29
Travaillez sur une copie du fichier et comparez le nombre de lignes avant et après chaque transformation. Les résultats peuvent dépendre de la version de votre logiciel et des options choisies. Notre méthode.