目次
Pandas
前回、NumPyを使って多変量正規分布に従う乱数を取得する方法(np.random.multivariate_normal)を紹介しました。
【NumPy】多変量正規分布に従う乱数を取得する方法(np.random.multivariate_normal)[Python]
NumPy 前回、Pythonのmatplotlibで2つのヒストグラムをhist2dを使って2次元カラープロットで表示する方法を紹介しました。 今回はNumPyを使って多変量正規分布に従う乱…
今回は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関数を紹介します。
ではでは今回はこんな感じで。
コメント