パンダで重複する行を見つけてフィルタリングする方法は?
データ分析中に、データをすぐに削除するのではなく、重複する行を調べてデータについて理解する必要がある場合があります。
幸いなことに、パンダでは、複製を操作する方法がほとんどありません。
.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
-
Windows で重複した写真を見つけて削除する方法
デジタル画像の制限の 1 つは、不要なストレージ スペースを占有する重複した写真です。ストレージに制限があるため、PC からファイルを削除するさまざまな方法を探しています。スペースを確保する最善の方法の 1 つは、何らかの理由で必要のない重複した画像を削除し、一意の画像をすべて保持することです。このガイドでは、Windows 10 に最適な重複写真ファインダーを使用して、Windows 10 から重複写真を見つけて削除する方法の概念に焦点を当てています。 PC で重複した写真を取得するにはどうすればよいですか? 重複を削除する理由 同じファイルのデータ バックアップ。 複数のユー
-
PC で回転および反転した複製を見つける方法
子供から大人、老夫婦まで、誰もがスマートフォンを使っています。スマートフォンで写真を撮る人が増えています。どこに行っても、人生で最高の瞬間を捉えることができます。素敵な機会の写真を家族、友人、その他の愛する人に即座に送信して、彼らがあなたと直接一緒にいるかのように見せることができます. しかし、数年にわたって集めた何十万もの画像を含むようになると、写真コレクションを整理するのが非常に難しいことをご存知ですか?複製は、見栄えの良い写真コレクションを台無しにする可能性があります。思い出を大切にしたいとき、それらはそれらを見つけるのを難しくする可能性があります.反転、回転、または色の変更の方法