Pandasのisinメソッドの使い方|リスト、辞書、Dataframeでの比較や複数条件のやり方を解説

スポンサーリンク

この記事では、Pandas モジュールにある isin() メソッドについて学び、異なるタイプの値が渡されたときのこの関数の動作について見ていきます。

それでは始めましょう。

スポンサーリンク

DataFrame.isin() メソッド

Pandasの isin() メソッドは、DataFrameに存在するデータをフィルタリングするために使用されます。

このメソッドは、DataFrameの各要素が指定された値を含んでいるかどうかを調べます。

このメソッドはブール値のDataFrameを返します。

指定された値に要素が含まれている場合、返されたDataFrameには True が含まれ、そうでない場合は False が表示されます。

このメソッドは、後述の例で説明するように、データフレームをフィルタリングするのに便利です。

isin()` メソッドのシンタックスは以下のとおりです。

パラメータは1つだけです。

DataFrame.isin(values)

ここで、パラメータ values には、以下のいずれかを指定することができます

  • リストまたはイテラブル
  • 辞書
  • Pandas Series
  • Pandas DataFrame

メソッドに異なる値が渡された場合の isin() メソッドの結果を見てみましょう。

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のカラムによって検索するデータ範囲が異なることになります。

したがって、各カラムを個別に検索することができます

例えば、以下のようにNameDepartment` のリストを辞書に渡して、それぞれの値で検索することができます

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を値として渡すときにはインデックスが重要になります。

値が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 のデータを簡単にフィルタリングできるようになりましたね。

読んでくれてありがとうございます。

タイトルとURLをコピーしました