[PYTHON] [Pandas] Comment vérifier les doublons dans un tableau et supprimer les doublons (équivalent à supprimer les doublons dans Excel)

[Python] Comment vérifier et supprimer les doublons dans une table (pandas DataFrame)

Un résumé de la façon de vérifier les éléments en double dans une table et de supprimer les valeurs en double

Vous pouvez effectuer le même traitement que la «suppression des doublons» qui est fréquemment utilisée dans Excel.


> Page officielle ・ [Duppliqué](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.duplicated.html?highlight=dupli#pandas.DataFrame.duplicated) ・ [Drop_duplicates](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Index.drop_duplicates.html?highlight=dupli#pandas.Index.drop_duplicates)
**table des matières**
  1. [Vérifier les lignes en double](# 1 Vérifier les lignes en double)
    1. duplicated
    2. duplicated(keep='last')
    3. duplicated(keep=False)
    4. duplicated(['aaa'])
    5. duplicated(['aaa','bbb'])
  2. [Supprimer les lignes en double](# 2 Supprimer les lignes en double)
    1. drop_duplicates
    2. drop_duplicates(keep='last')
    3. drop_duplicates(keep=False)
    4. drop_duplicates(['aaa'])
    5. drop_duplicates(['aaa','bbb'])
  3. [Rechercher les doublons dans l'en-tête de ligne](Rechercher les doublons dans l'en-tête de ligne n ° 3)
  4. [Vérifier les noms de ligne en double](#Check les noms de ligne en double)
  5. [Supprimer et confirmer les noms de ligne en double](# Supprimer et confirmer les noms de ligne en double)
  6. [Confirmation en double par nom de colonne](# 4 Confirmation en double par nom de colonne)

### ▼ Données du tableau à utiliser Vérifiez chaque méthode à l'aide du tableau ci-dessous.

image.png

-Row0 et row5 sont complètement dupliqués. ・ Tous les éléments de col0 et col4 sont dupliqués ・ Col2 est row0 = row5, row1 = row4 ・ Col3 est row0 = row5, row1 = row3


## 1. 1. Vérifiez les lignes en double -En utilisant la ** méthode dupliquée **, les lignes avec des éléments dupliqués peuvent être extraites.

-Il est également possible de spécifier la colonne cible par nom de colonne.


### Principales méthodes dupliquées

①duplicated ②duplicated(keep='last') ③duplicated(keep=False) ④duplicated(['aaa']) ⑤duplicated(['aaa','bbb'])


①duplicated `duplicated()` Les lignes en double qui sont complètement dupliquées dans toutes les colonnes sont jugées.

duplicated


df.duplicated()

#production
row0    False
row1    False
row2    False
row3    False
row4    False
row5     True
dtype: bool

Seule la ligne 5 est considérée comme dupliquée (True).

Row = 0 et row = 5 sont identiques dans toutes les colonnes. Par défaut, la première ligne est False, donc row5 est considérée comme dupliquée.

Par défaut: "keep = 'first'" Les deux processus suivants sont identiques.

df.duplicated() df.duplicated(keep='first')


②duplicated(keep='last') `duplicated(keep='last')` La première ligne dupliquée est considérée comme dupliquée. (Laissez le dos)

keep=last


df.duplicated(keep='last')

#production
row0     True
row1    False
row2    False
row3    False
row4    False
row5    False
dtype: bool

row0 est un jugement en double (True).


③duplicated(keep=False) `duplicated(keep=False)` Toutes les lignes dupliquées sont considérées comme des doublons.

keep=False


df.duplicated(keep=False)

#production
row0     True
row1    False
row2    False
row3    False
row4    False
row5     True
dtype: bool

Row0 et row5 sont des jugements en double (True).


④duplicated(['aaa']) `duplicated(['aaa'])` └ Le jugement en double est effectué uniquement pour la colonne spécifiée (ici, "aaa").

** ▼ En cas de duplication (['col0']) **

Spécifiez une colonne


df.duplicated(['col0'])

#production

row0    False
row1     True
row2     True
row3     True
row4     True
row5     True
dtype: bool

Puisque tous les éléments de col0 sont 1, tous sauf la première colonne sont considérés comme des doublons.


⑤duplicated(['aaa','bbb']) `duplicated(['aaa','bbb',,,])` └ Spécifiez plusieurs colonnes pour le jugement en double. └ Si chaque ligne spécifiée est un jugement en double (Vrai), un jugement en double est effectué. └ Si même une colonne est différente, elle sera False.
df.duplicated(['col0','col3'])

#production
row0    False
row1    False
row2    False
row3     True
row4    False
row5     True
dtype: bool

Seules les lignes 3 et 5 sont vraies. └ row3 de col0 et col3 est True → True └ row5 de col0 et col3 est True → True └ col0 et row1 sont True, la ligne1 de col3 est False → False


## 2. Supprimer les lignes en double Utilisez la méthode drop_duplicates. Contrairement à la confirmation de duplication ** pluriel **  └`drop_duplicates`  └`duplicated`

La ligne jugée dupliquée (True) par la méthode dupliquée est la cible de la suppression.


### Méthode principale drop_duplicates

①drop_duplicates ②drop_duplicates(keep='last') ③drop_duplicates(keep=False) ④drop_duplicates(['aaa']) ⑤drop_duplicates(['aaa','bbb'])


①drop_duplicates `drop_duplicates()` └ Supprimez les lignes où tous les éléments sont dupliqués. └ Laissez la ligne du haut (keep = 'first')

drop_duplicates


df.drop_duplicates()

image.png

la ligne 5 a été supprimée.

Dupliquer row0 et row5. Étant donné que la ligne du haut n'est pas considérée comme dupliquée (par défaut, keep = 'first'), la ligne5 a été supprimée.


②drop_duplicates(keep='last') `drop_duplicates(keep='last')` └ Supprimez les lignes où tous les éléments sont dupliqués. └ Laissez la ligne du bas (keep = 'last')

keep='last'


df.drop_duplicates(keep='last')

image.png


③drop_duplicates(keep=False) `drop_duplicates(keep=False)` └ Supprimer toutes les lignes en double

keep=False


df.drop_duplicates(keep=False)S

image.png

Supprimé à la fois row0 et row5.


④drop_duplicates(['aaa']) `drop_duplicates(['aaa'])` └ Supprimez les lignes en double dans la colonne spécifiée. └ "aaa": nom de la colonne
** ▼ En cas de drop_duplicates (['col0']) **

Spécifiez la colonne


df.drop_duplicates(['col0'])

image.png

Tous les éléments de col0 sont dupliqués de row0 à row5. Puisqu'il s'agit d'un jugement en double autre que row1, il sera supprimé.


** ▼ En cas de drop_duplicates (['col0'], keep = 'last') **

Spécifiez la colonne


drop_duplicates(['col0'], keep='last')

image.png

Si keep = 'last', la ligne du bas ne sera pas une vérification en double.


⑤drop_duplicates(['aaa','bbb']) `drop_duplicates(['aaa','bbb'])` └ Supprimez la ligne dupliquée dans les colonnes multiples spécifiées. └ "aaa" "bbb": nom de la colonne
** ▼ Pour df.drop_duplicates (['col2', 'col3']) **

Spécifiez plusieurs colonnes


df.drop_duplicates(['col2', 'col3'])

image.png

ligne5 supprimée.

Les doublons dans col2 sont row1, row4, row5. Les doublons dans col3 sont row1 et row5. ⇛ Le commun est row1 et row5. Étant donné que la première ligne dupliquée est définie pour rester (par défaut, keep = 'first'), seule la ligne5 sera supprimée.


## 3. 3. Confirmation en double dans l'en-tête de ligne Si vous spécifiez une ligne pour l'objet, vous pouvez vérifier s'il existe une ligne avec le même nom ou afficher une liste de noms de lignes sans duplication.

① Confirmation des noms de ligne en double ② Supprimez le nom de ligne en double et vérifiez

** ▼ Options disponibles ** keep='first' └ Ne jugez pas les doublons pour le nom de la première ligne keep='last' └ Ne jugez pas le nom de dernière ligne des doublons comme des doublons keep=False └ Tous les noms de ligne en double sont considérés comme des doublons └ Si False, aucun quota n'est requis


### ① Confirmation des noms de ligne en double `df.index.duplicated()` └ "df": données de table └ ".index": obtenir la liste des noms de ligne └ ".duplicated ()": affiche les lignes dupliquées comme True

Puisque l'option de ".duplicated ()" est "keep = 'first'" par défaut, la première ligne dupliquée est False et la deuxième ligne et les suivantes sont True.

Rechercher les noms de ligne en double


df.index.duplicated()

#production
# array([False, False, False, False,  True,  True])

▼ Table d'origine image.png

Les noms de 0ème et 5ème ligne et les noms de 1ère et 4ème ligne sont dupliqués. ⇛ Les 5e et 4e sont des jugements en double.


** ▼ Si garder = False **

Tous les noms de ligne en double sont True


df.index.duplicated(keep=False)

#production
# array([ True,  True, False, False,  True,  True])

### ② Supprimez le nom de ligne en double et vérifiez `df.index.drop_duplicates()`

Comment obtenir une liste de noms de lignes en supprimant les noms de lignes en double.

Utilisé lorsque vous souhaitez vérifier le nom de la ligne.

Obtenir en supprimant le nom de la ligne


df.index.drop_duplicates()

#production
# Index(['AAA', 'BBB', 'CCC', 'DDD'], dtype='object')

Les deuxièmes «AAA» et «BBB» qui ont été dupliqués ont été supprimés.

▼ Table d'origine image.png


## 4. Confirmation en double par nom de colonne Si vous spécifiez un nom de colonne dans l'objet, vous pouvez faire de même avec le nom de colonne.

df.columns.duplicated() df.columns.drop_duplicates() └ ".columns": Extraire les noms de colonnes de la table avec liste.


[Back to top](#python table duplicate check and how to remove duplicates)

Recommended Posts

[Pandas] Comment vérifier les doublons dans un tableau et supprimer les doublons (équivalent à supprimer les doublons dans Excel)
[Python] Comment générer une table pandas dans un fichier Excel
[GCF + Python] Comment importer Excel vers GCS et créer une nouvelle table dans BigQuery
[Python] Comment ajouter des lignes et des colonnes à une table (pandas DataFrame)
[Python] Comment supprimer des lignes et des colonnes dans une table (liste des options de méthode de dépôt)
<Pandas> Comment gérer les données de séries chronologiques dans le tableau croisé dynamique
Comment formater un tableau à l'aide de Pandas Appliquer, pivoter et permuter le niveau
Comment obtenir un nom de colonne et un nom d'index spécifiques avec Pandas DataFrame
Comment afficher DataFrame sous forme de tableau dans Markdown
Comment vérifier si une valeur existe dans un type d'énumération
Comment créer une trame de données et jouer avec des éléments avec des pandas
Lors de la résolution de l'exercice d'introduction aux statistiques 12.10, vérifiez comment dessiner un diagramme de dispersion dans les pandas.
Comment écrire sobrement avec des pandas
Comment supprimer un conteneur Docker
Comment coller un fichier CSV dans un fichier Excel à l'aide de Pandas
Comment comparer des listes et récupérer des éléments communs dans une liste
Comment vérifier la taille de la mémoire d'un dictionnaire en Python
Comment supprimer plusieurs positions (index) spécifiées dans une liste Python
Comment diviser et enregistrer un DataFrame
Comment supprimer des sessions expirées dans Django
Comment obtenir stacktrace en python
Comment afficher la table quatre-vingt-dix-neuf en python
Comment réattribuer un index dans pandas dataframe
Comment mettre un espace demi-largeur avant les lettres et les chiffres en Python.
Comment vérifier la version d'opencv avec python
Comment rendre le nom du conteneur accessible dans Docker en tant que sous-domaine
Comment lire des fichiers CSV avec Pandas
Comment utiliser is et == en Python
Comment utiliser les pandas Timestamp et date_range
[Note] Comment gérer l'erreur unicode et aucun fichier ou répertoire de ce type (sortie de la table dans un fichier Excel avec pandas)
Comment arrêter le programme jusqu'à une date et une heure spécifiques en python
Comment mentionner un groupe d'utilisateurs avec une notification de mou, comment vérifier l'ID d'un groupe d'utilisateurs
[Python] Comment nommer les données de table et les sortir avec csv (méthode to_csv)
Comment compter le nombre d'éléments dans Django et sortir dans le modèle
Comment lire les fichiers de numéros de série en boucle, les traiter et les représenter graphiquement
La première étape de l'analyse du journal (comment formater et mettre les données du journal dans Pandas)
Comment effacer un taple dans une liste (Python)
Comment générer une séquence en Python et C ++
Comment incorporer des variables dans des chaînes python
[Python] Comment lire des fichiers Excel avec des pandas
Comment implémenter un sélecteur de dégradé dans Houdini
Comment vérifier / extraire des fichiers dans un package RPM
Comment notifier les canaux Discord en Python
[Python] Comment dessiner un histogramme avec Matplotlib
Comment créer une API Rest dans Django
Comment écrire un document tuple nommé en 2020
Comment compter les nombres dans une plage spécifique
Ajouter des totaux aux lignes et aux colonnes avec des pandas
Comment lire des fichiers dans différents répertoires
Comment se moquer d'une fonction publique dans Pytest
Comment tracer l'autocorrélation et l'autocorrélation partielle avec Python
Comment diviser les données de formation en machine learning en variables objectives et autres dans Pandas
Comment vérifier s'il est dans le type de dictionnaire (Dictionary, Hash) en utilisant tout ou partie
Comment vérifier en Python si l'un des éléments d'une liste est dans une autre liste
Comment utiliser Docker pour conteneuriser votre application et comment utiliser Docker Compose pour exécuter votre application dans un environnement de développement
Comment spécifier un schéma dans les paramètres de la base de données Django
Comment convertir / restaurer une chaîne avec [] en python
[Python] Comment développer des variables dans une chaîne de caractères
Un mémorandum sur l'utilisation de keras.preprocessing.image de Keras
Comment accéder avec cache lors de la lecture_json avec pandas