この記事では、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 Sales 1 Sam 45 Engineering 2 Luna 23 Engineering 3 Harry 32 Human Resource |
値がリストの場合のisin()メソッド
isin()メソッドのパラメータ値としてリストが渡されると、DataFrame の各要素がリスト内に存在するかどうかをチェックし、見つかった場合は
Trueを表示します。
例えば、いくつかの部署を含む値のリストを渡すと、Departmentカラムに含まれるそれらの値は
True` と表示されます。
import pandas as pd
# Creating DataFrame data = pd.DataFrame({
'Name' : [ 'John' , 'Sam' , 'Luna' , 'Harry' ],
'Age' : [ 25 , 45 , 23 , 32 ],
'Department' : [ 'Sales' , 'Engineering' , 'Engineering' , 'Human Resource' ]
}) #List of Departments to filter departments_to_filter = [ 'Engineering' , 'Sales' , 'Finance' ]
result = data.isin(departments_to_filter)
print (result)
|
Name Age Department
0 False False True 1 False False True 2 False False True 3 False False False |
このように、状況に応じてDataFrameをフィルタリングすることも可能です。
例えば、20歳から30歳までの従業員を見つけたい場合、 Age
カラムに isin()
メソッドを使用することができます。
import pandas as pd
# Creating DataFrame data = 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 age age_filter = data[ 'Age' ].isin( range (start_age, end_age + 1 ))
# Using the filter to retrieve the data result = data[ age_filter ]
print (result)
|
Name Age Department
0 John 25 Sales 2 Luna 23 Engineering |
値がDictionaryの場合のisin()メソッド
isin()メソッドのパラメータ値としてDictionaryを渡した場合、DataFrameのカラムによって検索するデータ範囲が異なることになります。
したがって、各カラムを個別に検索することができます。
例えば、以下のようにNameと
Department` のリストを辞書に渡して、それぞれの値で検索することができます。
import pandas as pd
# Creating DataFrame data = pd.DataFrame({
'Name' : [ 'John' , 'Sam' , 'Luna' , 'Harry' ],
'Age' : [ 25 , 45 , 23 , 32 ],
'Department' : [ 'Sales' , 'Engineering' , 'Engineering' , 'Human Resource' ]
}) #Dictionary data to filter DataFrame dict_data_to_filter = { 'Name' : [ 'Sam' , 'Harry' ], 'Department' : [ 'Engineering' ]}
result = data.isin(dict_data_to_filter)
print (result)
|
Name Age Department
0 False False False 1 True False True 2 False False True 3 True False False |
値がシリーズである場合の isin() メソッド
Pandas Series を isin()
メソッドのパラメータ値として渡す場合、Series に値が書き込まれる順序が重要になります。
DataFrameの各カラムは、Seriesに記述されている値を順番に1つずつチェックします。
以下の例で考えてみましょう。
import pandas as pd
# Creating DataFrame data = 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 Luna series_data = pd.Series([ 'John' , 'Luna' , 'Sam' , 'Harry' ])
result = data.isin(series_data)
print (result)
|
Name Age Department
0 True False False 1 False False False 2 False False False 3 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 DataFrame data = 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 age df = 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 swapped df = 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 True 1 True False True 2 True False True 3 True False True ----------------- Name Age Department
0 True True True 1 True True True 2 False False False 3 False False False |
まとめ
この記事では、Pandasの isin()
メソッドについて、そのさまざまな使用例、そしてこのメソッドがDataFrameからデータをフィルタリングする際にどのように役立つかを学びました。
これで isin()
メソッドの使い方がわかり、DataFrame のデータを簡単にフィルタリングできるようになりましたね。
読んでくれてありがとうございます。