この記事では、Pandas モジュールにある isin() メソッドについて学び、異なるタイプの値が渡されたときのこの関数の動作について見ていきます。
それでは始めましょう。
DataFrame.isin() メソッド
Pandasの isin() メソッドは、DataFrameに存在するデータをフィルタリングするために使用されます。
このメソッドは、DataFrameの各要素が指定された値を含んでいるかどうかを調べます。
このメソッドはブール値のDataFrameを返します。
指定された値に要素が含まれている場合、返されたDataFrameには True が含まれ、そうでない場合は False が表示されます。
このメソッドは、後述の例で説明するように、データフレームをフィルタリングするのに便利です。
isin()` メソッドのシンタックスは以下のとおりです。
パラメータは1つだけです。
DataFrame.isin(values) |
ここで、パラメータ values には、以下のいずれかを指定することができます。
- リストまたはイテラブル
- 辞書
- Pandas Series
- Pandas DataFrame
メソッドに異なる値が渡された場合の isin() メソッドの結果を見てみましょう。
この記事もチェック:Pandasのデータフレームに行を追加する5つの簡単な方法
isin() メソッドの例
さまざまな型の値を渡して isin() メソッドの例をいくつか考えてみましょう。
以下の例では、以下のデータを使用します。
import pandas as pd
data = pd.DataFrame({
'Name': ['John', 'Sam', 'Luna', 'Harry'],
'Age': [25, 45, 23, 32],
'Department': ['Sales', 'Engineering', 'Engineering', 'Human Resource']
})print(data)
|
Name Age Department
0 John 25 Sales1 Sam 45 Engineering2 Luna 23 Engineering3 Harry 32 Human Resource |
値がリストの場合のisin()メソッド
isin()メソッドのパラメータ値としてリストが渡されると、DataFrame の各要素がリスト内に存在するかどうかをチェックし、見つかった場合はTrueを表示します。
例えば、いくつかの部署を含む値のリストを渡すと、Departmentカラムに含まれるそれらの値はTrue` と表示されます。
import pandas as pd
# Creating DataFramedata = pd.DataFrame({
'Name': ['John', 'Sam', 'Luna', 'Harry'],
'Age': [25, 45, 23, 32],
'Department': ['Sales', 'Engineering', 'Engineering', 'Human Resource']
})#List of Departments to filterdepartments_to_filter = ['Engineering', 'Sales', 'Finance']
result = data.isin(departments_to_filter)
print(result)
|
Name Age Department
0 False False True1 False False True2 False False True3 False False False |
このように、状況に応じてDataFrameをフィルタリングすることも可能です。
例えば、20歳から30歳までの従業員を見つけたい場合、 Age カラムに isin() メソッドを使用することができます。
import pandas as pd
# Creating DataFramedata = pd.DataFrame({
'Name': ['John', 'Sam', 'Luna', 'Harry'],
'Age': [25, 45, 23, 32],
'Department': ['Sales', 'Engineering', 'Engineering', 'Human Resource']
})start_age=20
end_age=30
# Using isin() method to filter employees on ageage_filter = data['Age'].isin(range(start_age, end_age+1))
# Using the filter to retrieve the dataresult = data[ age_filter ]
print(result)
|
Name Age Department
0 John 25 Sales2 Luna 23 Engineering |
値がDictionaryの場合のisin()メソッド
isin()メソッドのパラメータ値としてDictionaryを渡した場合、DataFrameのカラムによって検索するデータ範囲が異なることになります。
したがって、各カラムを個別に検索することができます。
例えば、以下のようにNameとDepartment` のリストを辞書に渡して、それぞれの値で検索することができます。
import pandas as pd
# Creating DataFramedata = pd.DataFrame({
'Name': ['John', 'Sam', 'Luna', 'Harry'],
'Age': [25, 45, 23, 32],
'Department': ['Sales', 'Engineering', 'Engineering', 'Human Resource']
})#Dictionary data to filter DataFramedict_data_to_filter = {'Name': ['Sam', 'Harry'], 'Department': ['Engineering']}
result = data.isin(dict_data_to_filter)
print(result)
|
Name Age Department
0 False False False1 True False True2 False False True3 True False False |
値がシリーズである場合の isin() メソッド
Pandas Series を isin() メソッドのパラメータ値として渡す場合、Series に値が書き込まれる順序が重要になります。
DataFrameの各カラムは、Seriesに記述されている値を順番に1つずつチェックします。
以下の例で考えてみましょう。
import pandas as pd
# Creating DataFramedata = pd.DataFrame({
'Name': ['John', 'Sam', 'Luna', 'Harry'],
'Age': [25, 45, 23, 32],
'Department': ['Sales', 'Engineering', 'Engineering', 'Human Resource']
})#Series data, changing index of Sam and Lunaseries_data = pd.Series(['John', 'Luna', 'Sam', 'Harry'])
result = data.isin(series_data)
print(result)
|
Name Age Department
0 True False False1 False False False2 False False False3 True False False |
Seriesに含まれる値はDataFrameに存在する全てのNamesを含んでいますが、’Sam’と’Luna’のインデックスを交換したため、インデックス1と2の結果にはFalseが含まれています。
このように、Seriesを値として渡すときにはインデックスが重要になります。
この記事もチェック:Pandas DataFrameの単一カラムの名前を変更する
値がDataFrameの場合のisin()メソッド
PandasのDataFrameが isin() メソッドのパラメータ値として渡される場合、渡されたDataFrameのインデックスとカラムの両方が一致しなければなりません。
もし両方のDataFrameが同じであっても、カラム名が一致しない場合は、それらのカラムに対して False という結果が表示されます。
もし、両方のDataFrameのデータが同じであっても、順番が異なる場合は、結果が異なる行に対して False となります。
このように、DataFrameを渡す場合には、インデックスとカラムの両方が重要です。
例題を考えてみましょう。
import pandas as pd
# Creating DataFramedata = pd.DataFrame({
'Name': ['John', 'Sam', 'Luna', 'Harry'],
'Age': [25, 45, 23, 32],
'Department': ['Sales', 'Engineering', 'Engineering', 'Human Resource']
})# DataFrame to filter, here column name Age to lowercased to agedf = pd.DataFrame({
'Name': ['John', 'Sam', 'Luna', 'Harry'],
'age': [25, 45, 23, 32],
'Department': ['Sales', 'Engineering', 'Engineering', 'Human Resource']
})result = data.isin(df)
print(result)
print("-----------------")
# DataFrame to filter, here last 2 rows are swappeddf = pd.DataFrame({
'Name': ['John', 'Sam', 'Harry', 'Luna'],
'Age': [25, 45, 32, 23],
'Department': ['Sales', 'Engineering', 'Human Resource', 'Engineering']
})result = data.isin(df)
print(result)
|
Name Age Department
0 True False True1 True False True2 True False True3 True False True----------------- Name Age Department
0 True True True1 True True True2 False False False3 False False False |
まとめ
この記事では、Pandasの isin() メソッドについて、そのさまざまな使用例、そしてこのメソッドがDataFrameからデータをフィルタリングする際にどのように役立つかを学びました。
これで isin() メソッドの使い方がわかり、DataFrame のデータを簡単にフィルタリングできるようになりましたね。
読んでくれてありがとうございます。