【Python】PandasのDataframeで条件を指定して抽出する方法を紹介!

こんにちは!

皆さんは、PandasのDataframeで条件を指定して要素を抽出したいと思ったことはありませんか?

Python初心者
いっぱいあるよ!

条件を指定して要素を抽出するには、マスクを得てDataFrameに与えることで簡単に抽出することができますよ。

今回の記事では、以下の内容について紹介します。

  • 条件を指定して抽出する方法
  • 複数の条件を指定して抽出する方法

条件を指定して抽出する方法

それでは、条件を指定して抽出する方法を紹介します。

条件を指定して抽出する流れは、以下のようになります。

  1. 条件を指定し、条件を満たすかどうかを表すブール値の表を得る
  2. その要素を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])
Python初心者
こっちの方がスッキリしてるね!

複数の条件を指定して抽出

もちろん同様に行うことで、複数の条件を指定することも可能です。

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に与える
  • 複数の条件を指定して抽出する方法
    →論理演算子に注意
Python初心者
様々な条件で、データを抽出してみるね!
先パイ
実践がいちばんの覚えるコツじゃな

皆さんも試してみて、覚えましょう!