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.
- Rechercher, extraire et compter les lignes en double : ๐โ๐ฎโ๐ฉโ๐ฅโ๐ขโ๐โ๐โ๐ญโ๐โ๐โ()
- Supprimer les lignes en double : ๐โ๐ซโ๐จโ๐ฉโ_๐โ๐ฎโ๐ฉโ๐ฅโ๐ขโ๐โ๐โ๐ญโ๐โ๐ฌโ()
- Utilisation de la base
- Choisissez les doublons ร conserver : ๐คโ๐โ๐โ๐ฉโ
- Spรฉcifier les colonnes pour la dรฉtection des doublons : ๐ฌโ๐ฎโ๐โ๐ฌโ๐โ๐ญโ
- Rรฉinitialiser le ๐ขโ๐งโ๐โ๐โ๐ฑโ : ๐ขโ๐ โ๐งโ๐จโ๐ซโ๐โ_๐ขโ๐งโ๐โ๐โ๐ฑโ
- Modifier l’objet d’origine : ๐ขโ๐งโ๐ฉโ๐ฅโ๐โ๐โ๐โ
- Agrรฉgation basรฉe sur les doublons : ๐ โ๐ซโ๐จโ๐ฎโ๐ฉโ๐โ๐ฒโ()
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๐โ๐ซโ๐ขโ๐โ๐ฌโ .
- pandas.DataFrame.duplicated โ documentation de pandas 2.1.4
- pandas.Series.duplicated โ documentation de pandas 2.1.4
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๐โ๐ซโ๐ขโ๐โ๐ฌโ .
- pandas.DataFrame.drop_duplicates โ documentation de pandas 2.1.4
- pandas.Series.drop_duplicates โ documentation de pandas 2.1.4
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 ๐ฃโ๐จโ๐ขโ๐งโ() .
