Python
 Computer >> コンピューター >  >> プログラミング >> Python

パンダで重複する行を見つけてフィルタリングする方法は?


データ分析中に、データをすぐに削除するのではなく、重複する行を調べてデータについて理解する必要がある場合があります。

幸いなことに、パンダでは、複製を操作する方法がほとんどありません。

.duplciated()

このメソッドを使用すると、DataFrameで重複する行を抽出できます。重複する新しいデータセットを使用します。リンクからHrデータセットをダウンロードしました。

import pandas as pd
import numpy as np

# Import HR Dataset with certain columns
df = pd.read_csv("https://raw.githubusercontent.com/sasankac/TestDataSet/master/HRDataset.csv",
usecols = ("Employee_Name""PerformanceScore","Position","CitizenDesc"))

#Sort the values on employee name and make it permanent
df.sort_values("Employee_Name"inplace = True)
df.head(3)



Employee_Name
位置
CitizenDesc
PerformanceScore
0
Adinolfi
生産技術者I
米国市民
超過
1
Adinolfi
Sr。 DBA
米国市民
完全に一致
2
Adinolfi
生産技術者II
米国市民
完全に一致


Duplicate()がデフォルトで機能する方法は、keepパラメーターによるものです。このパラメーターは、各値の最初の出現を非重複としてマークします。

このメソッドは、行が複数存在する場合、その行を重複としてマークするのではなく、最初の行の後の後続の各行を重複としてマークします。混乱している?もう一度例を挙げて説明します。バスケットに3つのリンゴがあるとすると、この方法では、最初のリンゴを非重複としてマークし、残りの2つのリンゴを重複としてマークします。

df["Employee_Name"].head(3)

出力

0 Adinolfi
1 Adinolfi
2 Adinolfi
Name: Employee_Name, dtype: object

df["Employee_Name"].duplicated().head(3)

出力

0 False
1 True
2 True
Name: Employee_Name, dtype: bool

次に、重複を抽出します(最初のオカレンスは重複ではなく、サブシーケンスのオカレンスは重複であり、このメソッドによって出力されることに注意してください)。このメソッドをデータフレームに渡す必要があります。

df.shape


(310, 4)


df[df["Employee_Name"].duplicated()]



Employee_Name
位置
CitizenDesc
PerformanceScore
1
Adinolfi
Sr。 DBA
米国市民
完全に一致
2
Adinolfi
生産技術者II
米国市民
完全に一致
3
Adinolfi
生産技術者I
米国市民
完全に一致
4
Adinolfi
プロダクションマネージャー
米国市民
完全に一致
6
アンダーソン
生産技術者I
米国市民
超過
..。
..。
..。
..。
..。
303

生産技術者II
米国市民
完全に一致
304

生産技術者II
米国市民
完全に一致
305

生産技術者I
米国市民
PIP
306

CIO
米国市民
超過
307

データアナリスト
米国市民
完全に一致

79行×4列

上記の出力から、.duplicated()メソッドを使用して抽出された79の重複を含む310行があります。

引数-「最後」

デフォルトでは、このメソッドは値の最初の出現を非重複としてマークします。引数keep=lastを渡すことでこの動作を変更できます。

このパラメータが行うことは、最初の2つのリンゴを重複としてマークし、最後の1つを非重複としてマークすることです。

df[df["Employee_Name"].duplicated(keep="last")]



Employee_Name
位置
CitizenDesc
PerformanceScore
0
Adinolfi
生産技術者I
米国市民
超過
1
Adinolfi
Sr。 DBA
米国市民
完全に一致
2
Adinolfi
生産技術者II
米国市民
完全に一致
3
Adinolfi
生産技術者I
米国市民
完全に一致
5
アンダーソン
生産技術者I
米国市民
完全に一致
..。
..。
..。
..。
..。
302

生産技術者II
米国市民
超過
303

生産技術者II
米国市民
完全に一致
304

生産技術者II
米国市民
完全に一致
305

生産技術者I
米国市民
PIP
306

CIO
米国市民
超過

引数-FALSE

keepパラメーターは、追加の引数「false」も受け入れます。これは、複数回発生するすべての値を重複としてマークします。この場合、上記の例に示すように、3つのリンゴすべてが最初または最後ではなく重複としてマークされます。

注– falseパラメーターを指定するときは、引用符を使用しないでください。

df[df"Employee_Name"].duplicated(keep=False)]



Employee_Name
位置
CitizenDesc
PerformanceScore
0
Adinolfi
生産技術者I
米国市民
超過
1
Adinolfi
Sr。 DBA
米国市民
完全に一致
2
Adinolfi
生産技術者II
米国市民
完全に一致
3
Adinolfi
生産技術者I
米国市民
完全に一致
4
Adinolfi
プロダクションマネージャー
米国市民
完全に一致
..。
..。
..。
..。
..。
303

生産技術者II
米国市民
完全に一致
304

生産技術者II
米国市民
完全に一致
305

生産技術者I
米国市民
PIP
306

CIO
米国市民
超過
307

データアナリスト
米国市民
完全に一致

最後に、データセットから一意の値を抽出するために、「〜」(ティルダ)記号を使用して値を無効にすることができます

df_unique~df["Employee_Name"].duplicated(keep=False)df[df_unique]



Employee_Name
位置
CitizenDesc
PerformanceScore
7
アンドレオラ
ソフトウェアエンジニア
米国市民
完全に一致
25
ボッツィ
プロダクションマネージャー
米国市民
完全に一致
26
ブラマンテ
オペレーションディレクター
米国市民
超過
27
ブリル
生産技術者I
米国市民
完全に一致
34
バーケット
生産技術者II
米国市民
完全に一致
..。
..。
..。
..。
..。
276
スイートウォーター
ソフトウェアエンジニア
米国市民
超過
277
Szabo
生産技術者I
非市民
完全に一致
278
タバレス
生産技術者II
米国市民
完全に一致
308

生産技術者I
米国市民
完全に一致
309
ジーマ
NaN
NaN
NaN

drop_duplicates()

このメソッドは前のメソッドと非常に似ていますが、このメソッドは単一のシリーズではなくDataFrameに配置できます。

注:-このメソッドは、DataFrameのすべての列で重複する行を検索し、それらを削除します。

len(df)

出力

310


len(df.drop_duplicates())

出力

290

サブセットパラメータ

サブセットパラメータは、重複をチェックできる文字列値として列名のリストを受け入れます。

df1=df.drop_duplicates(subset=["Employee_Name"],keep="first")df1

Employee_Name
位置
CitizenDesc
PerformanceScore
0
Adinolfi
生産技術者I
米国市民
超過
5
アンダーソン
生産技術者I
米国市民
完全に一致
7
アンドレオラ
ソフトウェアエンジニア
米国市民
完全に一致
14
Athwal
生産技術者I
米国市民
完全に一致
20
くちばし
生産技術者I
米国市民
完全に一致
..。
..。
..。
..。
..。
293
フォンマッセンバッハ
生産技術者II
米国市民
完全に一致
295
ウォレス
生産技術者I
米国市民
改善が必要
300

生産技術者I
対象となる非市民
完全に一致
308

生産技術者I
米国市民
完全に一致
309
ジーマ
NaN
NaN
NaN

複数の列を指定して、前のセクションで説明したすべてのキープパラメーターを使用できます。

df1=df.drop_duplicates(subset="Employee_Name""CitizenDesc"],keep=False)df1



Employee_Name
位置
CitizenDesc
PerformanceScore
7
アンドレオラ
ソフトウェアエンジニア
米国市民
完全に一致
16
くちばし
生産技術者I
対象となる非市民
完全に一致
25
ボッツィ
プロダクションマネージャー
米国市民
完全に一致
26
ブラマンテ
オペレーションディレクター
米国市民
超過
27
ブリル
生産技術者I
米国市民
完全に一致
..。
..。
..。
..。
..。
287
テヘダ
ネットワークエンジニア
対象となる非市民
完全に一致
286
テヘダ
ソフトウェアエンジニア
非市民
完全に一致
300

生産技術者I
対象となる非市民
完全に一致
308

生産技術者I
米国市民
完全に一致
309
ジーマ
NaN
NaN
NaN

unique()メソッド

一意のメソッドは、一連の一意の値を検索し、一意の値を配列として返します。この方法では、欠落している値が除外されません。

len(df["Employee_Name"])

出力

310


df["Employee_Name"].unique()


array(['Adinolfi', 'Anderson', 'Andreola', 'Athwal', 'Beak', 'Bondwell',
'Bozzi', 'Bramante', 'Brill', 'Brown', 'Burkett', 'Butler',
'Carabbio', 'Carey', 'Carr', 'Carter', 'Chace', 'Champaigne',
'Chan', 'Chang', 'Chivukula', 'Cierpiszewski', 'Cisco', 'Clayton',
'Cloninger', 'Close', 'Clukey', 'Cockel', 'Cole', 'Cornett',
'Costa', 'Crimmings', 'Daneault', 'Daniele', 'Darson', 'Davis',
'DeGweck', 'Del Bosque', 'Demita', 'Desimone', 'DiNocco',
'Dickinson', 'Dietrich', 'Digitale', 'Dobrin', 'Dolan', 'Dougall',
'Dunn', 'Eaton', 'Employee_Name', 'Engdahl', 'England', 'Erilus',
'Estremera', 'Evensen', 'Exantus', 'Faller', 'Fancett', 'Favis',
'Ferguson', 'Fernandes', 'Ferreira', 'Fidelia', 'Fitzpatrick',
'Foreman', 'Foss', 'Foster-Baker', 'Fraval', 'Friedman', 'Galia',
'Garcia', 'Garneau', 'Gaul', 'Gentry', 'Gerke', 'Gill', 'Gonzales',
'Gonzalez', 'Good', 'Handschiegl', 'Hankard', 'Harrison',
'Heitzman', 'Horton', 'Houlihan', 'Howard', 'Hubert', 'Hunts',
'Hutter', 'Huynh', 'Immediato', 'Ivey', 'Jackson', 'Jacobi',
'Jeannite', 'Jeremy Prater', 'Jhaveri', 'Johnson', 'Johnston',
'Jung', 'Kampew', 'Keatts', 'Khemmich', 'King', 'Kinsella',
'Kirill', 'Knapp', 'Kretschmer', 'LaRotonda', 'Lajiri', 'Langford',
'Langton', 'Latif', 'Le', 'LeBel', 'LeBlanc', 'Leach', 'Leruth',
'Liebig', 'Linares', 'Linden', 'Lindsay', 'Lundy', 'Lunquist',
'Lydon', 'Lynch', 'MacLennan', 'Mahoney', 'Manchester', 'Mancuso',
'Mangal', 'Martin', 'Martins', 'Maurice', 'McCarthy', 'McKinzie',
'Mckenna', 'Meads', 'Medeiros', 'Merlos', 'Miller', 'Monkfish',
'Monroe', 'Monterro', 'Moran', 'Morway', 'Motlagh', 'Moumanil',
'Mullaney', 'Murray', 'Navathe', 'Ndzi', 'Newman', 'Ngodup',
'Nguyen', 'Nowlan', 'O'hare', 'Oliver', 'Onque', 'Osturnka',
'Owad', 'Ozark', 'Panjwani', 'Patronick', 'Pearson', 'Pelech',
'Pelletier', 'Perry', 'Peters', 'Peterson', 'Petingill',
'Petrowsky', 'Pham', 'Pitt', 'Potts', 'Power', 'Punjabhi',
'Purinton', 'Quinn', 'Rachael', 'Rarrick', 'Rhoads', 'Riordan',
'Rivera', 'Roberson', 'Robertson', 'Robinson', 'Roby', 'Roehrich',
'Rogers', 'Roper', 'Rose', 'Rossetti', 'Roup', 'Ruiz', 'Saada',
'Saar-Beckles', 'Sadki', 'Sahoo', 'Salter', 'Sander', 'Semizoglou',
'Sewkumar', 'Shepard', 'Shields', 'Simard', 'Singh', 'Sloan',
'Smith', 'Soto', 'South', 'Sparks', 'Spirea', 'Squatrito',
'Stanford', 'Stanley', 'Steans', 'Stoica', 'Strong', 'Sullivan',
'Sutwell', 'Sweetwater', 'Szabo', 'Tavares', 'Tejeda', 'Veera',
'Von Massenbach', 'Wallace', 'Wang', 'Zhou', 'Zima'], dtype=object)


len(df["Employee_Name"].unique())

出力

231

.nunique()メソッド

このメソッドは、シリーズ内の一意の値の数を返します。このメソッドは、デフォルトで、パラメーターdropna=Trueを使用して欠落している値を除外します。

欠落している値を削除しないように、false引数をdropnaパラメーターに渡すことができます。

df["Employee_Name"].nunique()

出力

231


df["Employee_Name"].nunique(dropna=False)

出力

231

  1. Windows で重複した写真を見つけて削除する方法

    デジタル画像の制限の 1 つは、不要なストレージ スペースを占有する重複した写真です。ストレージに制限があるため、PC からファイルを削除するさまざまな方法を探しています。スペースを確保する最善の方法の 1 つは、何らかの理由で必要のない重複した画像を削除し、一意の画像をすべて保持することです。このガイドでは、Windows 10 に最適な重複写真ファインダーを使用して、Windows 10 から重複写真を見つけて削除する方法の概念に焦点を当てています。 PC で重複した写真を取得するにはどうすればよいですか? 重複を削除する理由 同じファイルのデータ バックアップ。 複数のユー

  2. PC で回転および反転した複製を見つける方法

    子供から大人、老夫婦まで、誰もがスマートフォンを使っています。スマートフォンで写真を撮る人が増えています。どこに行っても、人生で最高の瞬間を捉えることができます。素敵な機会の写真を家族、友人、その他の愛する人に即座に送信して、彼らがあなたと直接一緒にいるかのように見せることができます. しかし、数年にわたって集めた何十万もの画像を含むようになると、写真コレクションを整理するのが非常に難しいことをご存知ですか?複製は、見栄えの良い写真コレクションを台無しにする可能性があります。思い出を大切にしたいとき、それらはそれらを見つけるのを難しくする可能性があります.反転、回転、または色の変更の方法