こんにちは!
皆さんは、PandasのDataframeで条件を指定して要素を抽出したいと思ったことはありませんか?
いっぱいあるよ!
条件を指定して要素を抽出するには、マスクを得てDataFrameに与えることで簡単に抽出することができますよ。
今回の記事では、以下の内容について紹介します。
- 条件を指定して抽出する方法
- 複数の条件を指定して抽出する方法
条件を指定して抽出する方法
それでは、条件を指定して抽出する方法を紹介します。
条件を指定して抽出する流れは、以下のようになります。
- 条件を指定し、条件を満たすかどうかを表すブール値の表を得る
- その要素をDataFrameに与えて条件を満たす要素を抽出する
それでは、まずは1つの条件を指定して抽出する場合についてみていきましょう。
1つの条件を指定して抽出
まずはわかりやすいように、先ほど説明した流れに沿って説明しましょう。
データにはirisデータセットを用います。
まずは、条件を満たすかどうかのブール値の表を得ます。
今回は、irisデータセットの「sepal length」が5.0cm以下のデータを抽出します。
import pandas as pd
import seaborn as sns
iris = sns.load_dataset('iris')
mask = iris["sepal_length"]<5.0
print(mask.head())
実行結果
0 False
1 True
2 True
3 True
4 False
...
145 False
146 False
147 False
148 False
149 False
Name: sepal_length, Length: 150, dtype: bool
データフレームの各カラムに対して条件を指定すると上記のようなブール値の票を得ることができます。これをマスクと呼びます。
次に、先ほど得たマスクを、DataFrameに与えます。
print(iris[mask])
実行結果
sepal_length sepal_width petal_length petal_width species
1 4.9 3.0 1.4 0.2 setosa
2 4.7 3.2 1.3 0.2 setosa
3 4.6 3.1 1.5 0.2 setosa
6 4.6 3.4 1.4 0.3 setosa
8 4.4 2.9 1.4 0.2 setosa
9 4.9 3.1 1.5 0.1 setosa
11 4.8 3.4 1.6 0.2 setosa
12 4.8 3.0 1.4 0.1 setosa
13 4.3 3.0 1.1 0.1 setosa
22 4.6 3.6 1.0 0.2 setosa
24 4.8 3.4 1.9 0.2 setosa
29 4.7 3.2 1.6 0.2 setosa
30 4.8 3.1 1.6 0.2 setosa
34 4.9 3.1 1.5 0.2 setosa
37 4.9 3.6 1.4 0.1 setosa
38 4.4 3.0 1.3 0.2 setosa
41 4.5 2.3 1.3 0.3 setosa
42 4.4 3.2 1.3 0.2 setosa
45 4.8 3.0 1.4 0.3 setosa
47 4.6 3.2 1.4 0.2 setosa
57 4.9 2.4 3.3 1.0 versicolor
106 4.9 2.5 4.5 1.7 virginica
この一連の流れによって、DataFrameの要素を条件を指定して抽出することができました。
この流れを簡略化して記述すると、以下のようになります。
print(iris[iris["sepal_length"]<5.0])
こっちの方がスッキリしてるね!
複数の条件を指定して抽出
もちろん同様に行うことで、複数の条件を指定することも可能です。
import pandas as pd
import seaborn as sns
iris = sns.load_dataset('iris')
mask = (iris["sepal_length"]<5.0) & (iris["petal_length"]>2.0)
print(iris[mask])
実行結果
sepal_length sepal_width petal_length petal_width species
57 4.9 2.4 3.3 1.0 versicolor
106 4.9 2.5 4.5 1.7 virginica
1つの条件の場合と同様に、簡略化すると以下のようになります。
print(iris[(iris["sepal_length"]<5.0) & (iris["petal_length"]>2.0)])
論理和(or)には「|」論理積には「&」を用います。
論理演算子の「or」「and」ではエラーが出てしまうので注意してください。
例 )
print(iris[(iris["sepal_length"]<5.0) and (iris["petal_length"]>2.0)])
実行結果
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
まとめ
今回の記事では、以下の内容について紹介しました。
- 条件を指定して抽出する方法
→マスクを得て、それをDataframeに与える - 複数の条件を指定して抽出する方法
→論理演算子に注意
様々な条件で、データを抽出してみるね!
実践がいちばんの覚えるコツじゃな
皆さんも試してみて、覚えましょう!