【Pandas】isinと==で特定の値の要素を抽出する方法[Python]

  • URLをコピーしました!
目次

Pandas

前回、NumPyを使って多変量正規分布に従う乱数を取得する方法(np.random.multivariate_normal)を紹介しました。

今回はPandasでisinと==で特定の値の要素を抽出する方法を紹介します。

それでは始めていきましょう。

isinで特定の値の要素を抽出する方法

まずはisinで特定の値の要素を抽出する方法です。

「データフレーム.isin([値1, 値2, …])」として使用します。

import pandas as pd

data = ["a", "b", "c"]

df = pd.DataFrame(data)

print(df[0].isin(["a"]))

実行結果
0     True
1    False
2    False
Name: 0, dtype: bool

これで特定の値をもつ要素の場所がbool値でわかりました。

実際にその要素を取得するにはさらに「データフレーム[isinで得られた結果]」とします。

import pandas as pd

data = ["a", "b", "c"]

df = pd.DataFrame(data)

flag = df[0].isin(["a"])

print(df[flag])

実行結果
	0
0	a

ちなみにisinの引数は「リスト」ですので、値だけ書いた場合はエラーとなります。

import pandas as pd

data = ["a", "b", "c"]

df = pd.DataFrame(data)

print(df[0].isin("a"))

実行結果
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[25], line 7
      3 data = ["a", "b", "c"]
      5 df = pd.DataFrame(data)
----> 7 print(df[0].isin("a"))

File /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/pandas/core/series.py:5559, in Series.isin(self, values)
   5486 def isin(self, values) -> Series:
   5487     """
   5488     Whether elements in Series are contained in `values`.
   5489 
   (...)
   5557     dtype: bool
   5558     """
-> 5559     result = algorithms.isin(self._values, values)
   5560     return self._constructor(result, index=self.index, copy=False).__finalize__(
   5561         self, method="isin"
   5562     )

File /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/pandas/core/algorithms.py:477, in isin(comps, values)
    472     raise TypeError(
    473         "only list-like objects are allowed to be passed "
    474         f"to isin(), you passed a `{type(comps).__name__}`"
    475     )
    476 if not is_list_like(values):
--> 477     raise TypeError(
    478         "only list-like objects are allowed to be passed "
    479         f"to isin(), you passed a `{type(values).__name__}`"
    480     )
    482 if not isinstance(values, (ABCIndex, ABCSeries, ABCExtensionArray, np.ndarray)):
    483     orig_values = list(values)

TypeError: only list-like objects are allowed to be passed to isin(), you passed a `str`

また引数は「リスト」ですので、複数の値をリストとして渡せば、一度に抽出することも可能です。

import pandas as pd

data = ["a", "b", "c"]

df = pd.DataFrame(data)

print(df[0].isin(["a", "b"]))

実行結果
0     True
1     True
2    False
Name: 0, dtype: bool

ちなみに検索は「全部一致」で行われ、部分一致では一致したとみなされず、抽出されませんので、ご注意ください。

import pandas as pd

data = ["abc", "abd", "abe"]

df = pd.DataFrame(data)

df[0].isin(["ab"])

実行結果
0    False
1    False
2    False
Name: 0, dtype: bool

==で特定の値の要素を抽出する方法

次に==で特定の値の要素を抽出する方法を見てみましょう。

こちらの場合は「データフレーム[データフレーム[検索範囲] == 値]」とします。

import pandas as pd

data = ["abc", "abd", "abe"]

df = pd.DataFrame(data)

print(df[df[0] == "abc"])

実行結果
     0
0  abc

こちらの場合も「全部一致」で検索が行われるため、部分一致では一致したとみなされません。

import pandas as pd

data = ["abc", "abd", "abe"]

df = pd.DataFrame(data)

print(df[df[0] == "ab"])

実行結果
Empty DataFrame
Columns: [0]
Index: []

部分一致した要素を見つける方法

ちなみに部分一致した要素を見つけたい場合、「if 値 in リスト:」を使うのが楽です。

data = ["abc", "abd", "abe"]

for d in data:
    if "ab" in d:
        print(d)

実行結果
abc
abd
abe

次回は自作関数を使ってリストから条件を満たす要素を抽出するfilter関数を紹介します。

ではでは今回はこんな感じで。

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

目次