Skip to content

Dans pandas, la mรฉthode ๐โ€Œ๐ฎโ€Œ๐ฉโ€Œ๐ฅโ€Œ๐ขโ€Œ๐œโ€Œ๐šโ€Œ๐ญโ€Œ๐žโ€Œ๐โ€Œ() est utilisรฉe pour rechercher, extraire et compter les lignes en double dans un D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ , tandis que ๐โ€Œ๐ซโ€Œ๐จโ€Œ๐ฉโ€Œ_๐โ€Œ๐ฎโ€Œ๐ฉโ€Œ๐ฅโ€Œ๐ขโ€Œ๐œโ€Œ๐šโ€Œ๐ญโ€Œ๐žโ€Œ๐ฌโ€Œ() est utilisรฉ pour supprimer ces doublons.

Cet article explique รฉgalement la mรฉthode ๐ โ€Œ๐ซโ€Œ๐จโ€Œ๐ฎโ€Œ๐ฉโ€Œ๐›โ€Œ๐ฒโ€Œ() , qui agrรจge les valeurs en fonction des doublons.

Contenu

La version pandas utilisรฉe dans cet article est la suivante. Notez que les fonctionnalitรฉs peuvent varier selon les versions. Le D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ suivant est utilisรฉ comme exemple.

import pandas as pd print(pd.__version__) # 2.1.4 df = pd.read_csv('data/src/sample_pandas_normal.csv') df.loc[6] = ['Dave', 68, 'TX', 70] print(df) # name age state point # 0 Alice 24 NY 64 # 1 Bob 42 CA 92 # 2 Charlie 18 CA 70 # 3 Dave 68 TX 70 # 4 Ellen 24 CA 88 # 5 Frank 30 NY 57 # 6 Dave 68 TX 70 

Les exemples suivants utilisent D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ , mais S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ prend รฉgalement en charge ๐โ€Œ๐ฎโ€Œ๐ฉโ€Œ๐ฅโ€Œ๐ขโ€Œ๐œโ€Œ๐šโ€Œ๐ญโ€Œ๐žโ€Œ๐โ€Œ () et ๐โ€Œ๐ซโ€Œ๐จโ€Œ๐ฉโ€Œ_๐โ€Œ๐ฎโ€Œ๐ฉโ€Œ๐ฅโ€Œ๐ขโ€Œ๐œโ€Œ๐šโ€Œ๐ญโ€Œ๐žโ€Œ๐ฌโ€Œ() de la mรชme maniรจre.

Rechercher, extraire et compter les lignes en double : ๐โ€Œ๐ฎโ€Œ๐ฉโ€Œ๐ฅโ€Œ๐ขโ€Œ๐œโ€Œ๐šโ€Œ๐ญโ€Œ๐žโ€Œ๐โ€Œ()

Utilisez la mรฉthode ๐โ€Œ๐ฎโ€Œ๐ฉโ€Œ๐ฅโ€Œ๐ขโ€Œ๐œโ€Œ๐šโ€Œ๐ญโ€Œ๐žโ€Œ๐โ€Œ() pour rechercher, extraire et compter les lignes en double dans un D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ ou les รฉlรฉments en double dans un S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ .

Utilisation de la base

๐โ€Œ๐ฎโ€Œ๐ฉโ€Œ๐ฅโ€Œ๐ขโ€Œ๐œโ€Œ๐šโ€Œ๐ญโ€Œ๐žโ€Œ๐โ€Œ() renvoie une valeur boolรฉenne S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ qui marque les lignes en double comme T๐ซโ€Œ๐ฎโ€Œ๐žโ€Œ . Par dรฉfaut, les lignes sont considรฉrรฉes comme des doublons si toutes les valeurs de colonne sont รฉgales.

print(df.duplicated()) # 0 False # 1 False # 2 False # 3 False # 4 False # 5 False # 6 True # dtype: bool 

Vous pouvez extraire les doublons du D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ en utilisant le S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ rรฉsultant .

print(df[df.duplicated()]) # name age state point # 6 Dave 68 TX 70 

Choisissez les doublons ร  conserver : ๐คโ€Œ๐žโ€Œ๐žโ€Œ๐ฉโ€Œ

Par dรฉfaut ( ๐คโ€Œ๐žโ€Œ๐žโ€Œ๐ฉโ€Œ=’๐Ÿโ€Œ๐ขโ€Œ๐ซโ€Œ๐ฌโ€Œ๐ญโ€Œ’ ), ๐โ€Œ๐ฎโ€Œ๐ฉโ€Œ๐ฅโ€Œ๐ขโ€Œ๐œโ€Œ๐šโ€Œ๐ญโ€Œ๐žโ€Œ๐โ€Œ() marque toutes les lignes en double comme T๐ซโ€Œ๐ฎโ€Œ๐žโ€Œ , ร  l’exception de la premiรจre occurrence, qui est marquรฉe comme F๐šโ€Œ๐ฅโ€Œ๐ฌโ€Œ๐žโ€Œ . ร€ l’inverse, le paramรจtre ๐คโ€Œ๐žโ€Œ๐žโ€Œ๐ฉโ€Œ=’๐ฅโ€Œ๐šโ€Œ๐ฌโ€Œ๐ญโ€Œ’ marque tous les doublons comme T๐ซโ€Œ๐ฎโ€Œ๐žโ€Œ, ร  l’exception de la derniรจre occurrence.

print(df.duplicated()) # 0 False # 1 False # 2 False # 3 False # 4 False # 5 False # 6 True # dtype: bool print(df.duplicated(keep='last')) # 0 False # 1 False # 2 False # 3 True # 4 False # 5 False # 6 False # dtype: bool 

Le paramรจtre ๐คโ€Œ๐žโ€Œ๐žโ€Œ๐ฉโ€Œ=F๐šโ€Œ๐ฅโ€Œ๐ฌโ€Œ๐žโ€Œ marque tous les doublons comme T๐ซโ€Œ๐ฎโ€Œ๐žโ€Œ .

print(df.duplicated(keep=False)) # 0 False # 1 False # 2 False # 3 True # 4 False # 5 False # 6 True # dtype: bool 

Spรฉcifier les colonnes pour la dรฉtection des doublons : ๐ฌโ€Œ๐ฎโ€Œ๐›โ€Œ๐ฌโ€Œ๐žโ€Œ๐ญโ€Œ

Pour identifier les doublons en fonction de colonnes spรฉcifiques, utilisez l’argument ๐ฌโ€Œ๐ฎโ€Œ๐›โ€Œ๐ฌโ€Œ๐žโ€Œ๐ญโ€Œ . Par dรฉfaut, les doublons sont identifiรฉs dans toutes les colonnes.

print(df.duplicated(subset='state')) # 0 False # 1 False # 2 True # 3 False # 4 True # 5 True # 6 True # dtype: bool 

Il est รฉgalement possible de crรฉer plusieurs colonnes dans une liste. Les lignes correspondant ร  toutes ces colonnes sont marquรฉes comme des doublons.

print(df.duplicated(subset=['state', 'point'])) # 0 False # 1 False # 2 False # 3 False # 4 False # 5 False # 6 True # dtype: bool 

Compter les lignes en double et non en double

Vous pouvez compter les lignes en double en comptant T๐ซโ€Œ๐ฎโ€Œ๐žโ€Œ dans le S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ renvoyรฉ par ๐โ€Œ๐ฎโ€Œ๐ฉโ€Œ๐ฅโ€Œ๐ขโ€Œ๐œโ€Œ๐šโ€Œ๐ญโ€Œ๐žโ€Œ๐โ€Œ() . T๐ซโ€Œ๐ฎโ€Œ๐žโ€Œ peut รชtre comptรฉ avec la mรฉthode ๐ฌโ€Œ๐ฎโ€Œ๐ฆโ€Œ() .

print(df.duplicated().sum()) # 1 

Pour compter F๐šโ€Œ๐ฅโ€Œ๐ฌโ€Œ๐žโ€Œ (reprรฉsentant les lignes non dupliquรฉes), inversez avec ~ puis utilisez la mรฉthode ๐ฌโ€Œ๐ฎโ€Œ๐ฆโ€Œ() .

print(~df.duplicated()) # 0 True # 1 True # 2 True # 3 True # 4 True # 5 True # 6 False # dtype: bool print((~df.duplicated()).sum()) # 6 

Les dรฉcomptes en double et non en double peuvent รชtre obtenus ร  l’aide de ๐ฏโ€Œ๐šโ€Œ๐ฅโ€Œ๐ฎโ€Œ๐žโ€Œ_๐œโ€Œ๐จโ€Œ๐ฎโ€Œ๐งโ€Œ๐ญโ€Œ๐ฌโ€Œ() .

print(df.duplicated().value_counts()) # False 6 # True 1 # Name: count, dtype: int64 

Les rรฉsultats varient en fonction de l’argument ๐คโ€Œ๐žโ€Œ๐žโ€Œ๐ฉโ€Œ , alors choisissez le paramรจtre appropriรฉ ร  vos besoins.

print(df.duplicated(keep=False).value_counts()) # False 5 # True 2 # Name: count, dtype: int64 

Supprimer les lignes en double : ๐โ€Œ๐ซโ€Œ๐จโ€Œ๐ฉโ€Œ_๐โ€Œ๐ฎโ€Œ๐ฉโ€Œ๐ฅโ€Œ๐ขโ€Œ๐œโ€Œ๐šโ€Œ๐ญโ€Œ๐žโ€Œ๐ฌโ€Œ()

Utilisez la mรฉthode ๐โ€Œ๐ซโ€Œ๐จโ€Œ๐ฉโ€Œ_๐โ€Œ๐ฎโ€Œ๐ฉโ€Œ๐ฅโ€Œ๐ขโ€Œ๐œโ€Œ๐šโ€Œ๐ญโ€Œ๐žโ€Œ๐ฌโ€Œ() pour supprimer les lignes en double d’un D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ ou les รฉlรฉments en double d’un S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ .

Utilisation de la base

Par dรฉfaut, les lignes sont considรฉrรฉes comme des doublons si toutes les valeurs des colonnes sont รฉgales. La premiรจre ligne en double est conservรฉe, tandis que les autres sont supprimรฉes.

print(df.drop_duplicates()) # name age state point # 0 Alice 24 NY 64 # 1 Bob 42 CA 92 # 2 Charlie 18 CA 70 # 3 Dave 68 TX 70 # 4 Ellen 24 CA 88 # 5 Frank 30 NY 57 

Choisissez les doublons ร  conserver : ๐คโ€Œ๐žโ€Œ๐žโ€Œ๐ฉโ€Œ

L’argument ๐คโ€Œ๐žโ€Œ๐žโ€Œ๐ฉโ€Œ dans ๐โ€Œ๐ซโ€Œ๐จโ€Œ๐ฉโ€Œ_๐โ€Œ๐ฎโ€Œ๐ฉโ€Œ๐ฅโ€Œ๐ขโ€Œ๐œโ€Œ๐šโ€Œ๐ญโ€Œ๐žโ€Œ๐ฌโ€Œ() se comporte de maniรจre similaire ร  son utilisation dans ๐โ€Œ๐ฎโ€Œ๐ฉโ€Œ๐ฅโ€Œ๐ขโ€Œ๐œโ€Œ๐šโ€Œ๐ญโ€Œ๐žโ€Œ๐โ€Œ() .

Le paramรจtre par dรฉfaut ๐คโ€Œ๐žโ€Œ๐žโ€Œ๐ฉโ€Œ=’๐Ÿโ€Œ๐ขโ€Œ๐ซโ€Œ๐ฌโ€Œ๐ญโ€Œ’ conserve la premiรจre occurrence de chaque ligne en double, tandis que ๐คโ€Œ๐žโ€Œ๐žโ€Œ๐ฉโ€Œ=’๐ฅโ€Œ๐šโ€Œ๐ฌโ€Œ๐ญโ€Œ’ conserve la derniรจre. Le paramรจtre ๐คโ€Œ๐žโ€Œ๐žโ€Œ๐ฉโ€Œ=F๐šโ€Œ๐ฅโ€Œ๐ฌโ€Œ๐žโ€Œ supprime tous les doublons.

print(df.drop_duplicates(keep='last')) # name age state point # 0 Alice 24 NY 64 # 1 Bob 42 CA 92 # 2 Charlie 18 CA 70 # 4 Ellen 24 CA 88 # 5 Frank 30 NY 57 # 6 Dave 68 TX 70 print(df.drop_duplicates(keep=False)) # name age state point # 0 Alice 24 NY 64 # 1 Bob 42 CA 92 # 2 Charlie 18 CA 70 # 4 Ellen 24 CA 88 # 5 Frank 30 NY 57 

Spรฉcifier les colonnes pour la dรฉtection des doublons : ๐ฌโ€Œ๐ฎโ€Œ๐›โ€Œ๐ฌโ€Œ๐žโ€Œ๐ญโ€Œ

Spรฉcifiez les colonnes pour la dรฉtection des doublons avec l’argument ๐ฌโ€Œ๐ฎโ€Œ๐›โ€Œ๐ฌโ€Œ๐žโ€Œ๐ญโ€Œ , similaire ร  ๐โ€Œ๐ฎโ€Œ๐ฉโ€Œ๐ฅโ€Œ๐ขโ€Œ๐œโ€Œ๐šโ€Œ๐ญโ€Œ๐žโ€Œ๐โ€Œ() .

print(df.drop_duplicates(subset='state')) # name age state point # 0 Alice 24 NY 64 # 1 Bob 42 CA 92 # 3 Dave 68 TX 70 print(df.drop_duplicates(subset=['state', 'point'])) # name age state point # 0 Alice 24 NY 64 # 1 Bob 42 CA 92 # 2 Charlie 18 CA 70 # 3 Dave 68 TX 70 # 4 Ellen 24 CA 88 # 5 Frank 30 NY 57 

Rรฉinitialiser le ๐ขโ€Œ๐งโ€Œ๐โ€Œ๐žโ€Œ๐ฑโ€Œ : ๐ขโ€Œ๐ โ€Œ๐งโ€Œ๐จโ€Œ๐ซโ€Œ๐žโ€Œ_๐ขโ€Œ๐งโ€Œ๐โ€Œ๐žโ€Œ๐ฑโ€Œ

Le rรฉglage ๐ขโ€Œ๐ โ€Œ๐งโ€Œ๐จโ€Œ๐ซโ€Œ๐žโ€Œ_๐ขโ€Œ๐งโ€Œ๐โ€Œ๐žโ€Œ๐ฑโ€Œ=T๐ซโ€Œ๐ฎโ€Œ๐žโ€Œ rรฉinitialise ๐ขโ€Œ๐งโ€Œ๐โ€Œ๐žโ€Œ๐ฑโ€Œ sur une sรฉquence basรฉe sur 0.

print(df.drop_duplicates(subset='state', keep='last')) # name age state point # 4 Ellen 24 CA 88 # 5 Frank 30 NY 57 # 6 Dave 68 TX 70 print(df.drop_duplicates(subset='state', keep='last', ignore_index=True)) # name age state point # 0 Ellen 24 CA 88 # 1 Frank 30 NY 57 # 2 Dave 68 TX 70 

Modifier l’objet d’origine : ๐ขโ€Œ๐งโ€Œ๐ฉโ€Œ๐ฅโ€Œ๐šโ€Œ๐œโ€Œ๐žโ€Œ

Par dรฉfaut, ๐โ€Œ๐ซโ€Œ๐จโ€Œ๐ฉโ€Œ_๐โ€Œ๐ฎโ€Œ๐ฉโ€Œ๐ฅโ€Œ๐ขโ€Œ๐œโ€Œ๐šโ€Œ๐ญโ€Œ๐žโ€Œ๐ฌโ€Œ() renvoie un nouvel objet sans modifier l’original. La dรฉfinition de ๐ขโ€Œ๐งโ€Œ๐ฉโ€Œ๐ฅโ€Œ๐šโ€Œ๐œโ€Œ๐žโ€Œ=T๐ซโ€Œ๐ฎโ€Œ๐žโ€Œ modifie l’objet d’origine.

df.drop_duplicates(subset='state', keep='last', inplace=True) print(df) # name age state point # 4 Ellen 24 CA 88 # 5 Frank 30 NY 57 # 6 Dave 68 TX 70 

Agrรฉgation basรฉe sur les doublons : ๐ โ€Œ๐ซโ€Œ๐จโ€Œ๐ฎโ€Œ๐ฉโ€Œ๐›โ€Œ๐ฒโ€Œ()

Utilisez ๐ โ€Œ๐ซโ€Œ๐จโ€Œ๐ฎโ€Œ๐ฉโ€Œ๐›โ€Œ๐ฒโ€Œ() pour agrรฉger les valeurs en fonction des doublons.

Dans les exemples suivants, les valeurs moyennes des colonnes numรฉriques ( ๐šโ€Œ๐ โ€Œ๐žโ€Œ et ๐ฉโ€Œ๐จโ€Œ๐ขโ€Œ๐งโ€Œ๐ญโ€Œ ) sont calculรฉes pour les valeurs dupliquรฉes dans la colonne ๐ฌโ€Œ๐ญโ€Œ๐šโ€Œ๐ญโ€Œ๐žโ€Œ .

df = pd.read_csv('data/src/sample_pandas_normal.csv') print(df) # name age state point # 0 Alice 24 NY 64 # 1 Bob 42 CA 92 # 2 Charlie 18 CA 70 # 3 Dave 68 TX 70 # 4 Ellen 24 CA 88 # 5 Frank 30 NY 57 print(df.groupby('state').mean(numeric_only=True)) # age point # state  # CA 28.0 83.333333 # NY 27.0 60.500000 # TX 68.0 70.000000 

La concatรฉnation de chaรฎnes ou la conversion en listes est รฉgalement possible.

print( df.groupby('state').agg( {'name': lambda x: ','.join(x), 'age': 'mean', 'point': 'sum'} ) ) # name age point # state  # CA Bob,Charlie,Ellen 28.0 250 # NY Alice,Frank 27.0 121 # TX Dave 68.0 70 print(df.groupby('state').agg({'name': list, 'age': 'mean', 'point': 'sum'})) # name age point # state  # CA [Bob, Charlie, Ellen] 28.0 250 # NY [Alice, Frank] 27.0 121 # TX [Dave] 68.0 70 

Pour plus de dรฉtails sur ๐ โ€Œ๐ซโ€Œ๐จโ€Œ๐ฎโ€Œ๐ฉโ€Œ๐›โ€Œ๐ฒโ€Œ() , reportez-vous ร  l’article suivant.

La concatรฉnation de chaรฎnes peut รชtre effectuรฉe ร  l’aide d’expressions lambda pour appliquer la mรฉthode ๐ฃโ€Œ๐จโ€Œ๐ขโ€Œ๐งโ€Œ() .