【Python】Pandasで不等号を使ってデータフレームをフィルタリングする方法

はじめに

PandasはPythonでデータ分析を行う際に欠かせないライブラリの一つです。Pandasを使えば、Excelのようなテーブル形式のデータを簡単に扱うことができます。Pandasには、データフレームというオブジェクトがあり、これを使えばデータフレーム内のデータを簡単にフィルタリングできます。

データフレームのフィルタリングの重要性

データ分析では、多くの場合、全てのデータを分析するのではなく、特定の条件を満たすデータだけを取り出して分析を行うことがあります。このような場合、データフレームのフィルタリングが必要となります。Pandasを使えば、フィルタリングは簡単に行えます。

不等号を使った基本的なフィルタリング方法

不等号を使って、ある列の値が特定の値よりも大きいデータや、特定の値よりも小さいデータを抽出することができます。

以下の例では、irisデータセットを読み込み、”petal_width”が1.5より大きいデータを抽出しています。

import pandas as pd
# irisデータセットを読み込む
iris = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data',
                   names=['sepal_length', 'sepal_width', 'petal_length', 'petal_width', 'class'])
# "petal_width"が1.5より大きいデータを抽出する
df = iris[iris['petal_width'] > 1.5]
print(df)

上記のコードを実行すると、以下のように”petal_width”が1.5より大きいデータが抽出されます。

     sepal_length  sepal_width  petal_length  petal_width            class
56            6.3          3.3           4.7          1.6  Iris-versicolor
70            5.9          3.2           4.8          1.8  Iris-versicolor
77            6.7          3.0           5.0          1.7  Iris-versicolor
83            6.0          2.7           5.1          1.6  Iris-versicolor
85            6.0          3.4           4.5          1.6  Iris-versicolor
100           6.3          3.3           6.0          2.5   Iris-virginica
101           5.8          2.7           5.1          1.9   Iris-virginica
102           7.1          3.0           5.9          2.1   Iris-virginica
103           6.3          2.9           5.6          1.8   Iris-virginica
104           6.5          3.0           5.8          2.2   Iris-virginica
105           7.6          3.0           6.6          2.1   Iris-virginica
106           4.9          2.5           4.5          1.7   Iris-virginica
107           7.3          2.9           6.3          1.8   Iris-virginica
108           6.7          2.5           5.8          1.8   Iris-virginica
109           7.2          3.6           6.1          2.5   Iris-virginica
110           6.5          3.2           5.1          2.0   Iris-virginica
111           6.4          2.7           5.3          1.9   Iris-virginica
112           6.8          3.0           5.5          2.1   Iris-virginica
113           5.7          2.5           5.0          2.0   Iris-virginica
114           5.8          2.8           5.1          2.4   Iris-virginica
115           6.4          3.2           5.3          2.3   Iris-virginica
116           6.5          3.0           5.5          1.8   Iris-virginica
117           7.7          3.8           6.7          2.2   Iris-virginica
118           7.7          2.6           6.9          2.3   Iris-virginica
120           6.9          3.2           5.7          2.3   Iris-virginica
121           5.6          2.8           4.9          2.0   Iris-virginica
122           7.7          2.8           6.7          2.0   Iris-virginica
123           6.3          2.7           4.9          1.8   Iris-virginica
124           6.7          3.3           5.7          2.1   Iris-virginica
125           7.2          3.2           6.0          1.8   Iris-virginica
126           6.2          2.8           4.8          1.8   Iris-virginica
127           6.1          3.0           4.9          1.8   Iris-virginica
128           6.4          2.8           5.6          2.1   Iris-virginica
129           7.2          3.0           5.8          1.6   Iris-virginica
130           7.4          2.8           6.1          1.9   Iris-virginica
131           7.9          3.8           6.4          2.0   Iris-virginica
132           6.4          2.8           5.6          2.2   Iris-virginica
135           7.7          3.0           6.1          2.3   Iris-virginica
136           6.3          3.4           5.6          2.4   Iris-virginica
137           6.4          3.1           5.5          1.8   Iris-virginica
138           6.0          3.0           4.8          1.8   Iris-virginica
139           6.9          3.1           5.4          2.1   Iris-virginica
140           6.7          3.1           5.6          2.4   Iris-virginica
141           6.9          3.1           5.1          2.3   Iris-virginica
142           5.8          2.7           5.1          1.9   Iris-virginica
143           6.8          3.2           5.9          2.3   Iris-virginica
144           6.7          3.3           5.7          2.5   Iris-virginica
145           6.7          3.0           5.2          2.3   Iris-virginica
146           6.3          2.5           5.0          1.9   Iris-virginica
147           6.5          3.0           5.2          2.0   Iris-virginica
148           6.2          3.4           5.4          2.3   Iris-virginica
149           5.9          3.0           5.1          1.8   Iris-virginica

不等号を使って、ある列の値が特定の値以下、または特定の値以上のデータを抽出することもできます。

以下の例では、irisデータセットを読み込み、”sepal_width”が3以下のデータを抽出しています。

import pandas as pd
# irisデータセットを読み込む
iris = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data',
                   names=['sepal_length', 'sepal_width', 'petal_length', 'petal_width', 'class'])
# "sepal_width"が3以下のデータを抽出する
df = iris[iris['sepal_width'] <= 3]
print(df)

上記のコードを実行すると、以下のように”sepal_width”が3以下のデータが抽出されます。

     sepal_length  sepal_width  petal_length  petal_width           class
0             5.1          3.5           1.4          0.2     Iris-setosa
1             4.9          3.0           1.4          0.2     Iris-setosa
2             4.7          3.2           1.3          0.2     Iris-setosa
3             4.6          3.1           1.5          0.2     Iris-setosa
4             5.0          3.6           1.4          0.2     Iris-setosa
..            ...          ...           ...          ...             ...
144           6.7          3.3           5.7          2.5  Iris-virginica
145           6.7          3.0           5.2          2.3  Iris-virginica
147           6.5          3.0           5.2          2.0  Iris-virginica
148           6.2          3.4           5.4          2.3  Iris-virginica
149           5.9          3.0           5.1          1.8  Iris-virginica

不等号を使ったフィルタリングは非常に簡単で、データ分析の基本的な操作です。

複数の条件を組み合わせたフィルタリング

複数の条件を組み合わせて、より詳細なフィルタリングを行うこともできます。複数の条件を組み合わせる場合は、&(かつ)や|(または)を使って条件を結合します。

以下の例では、irisデータセットを読み込み、”petal_width”が1.5より大きく、かつ”class”が”Iris-versicolor”であるデータを抽出しています。

import pandas as pd
# irisデータセットを読み込む
iris = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data',
names=['sepal_length', 'sepal_width', 'petal_length', 'petal_width', 'class'])
# "petal_width"が1.5より大きく、かつ"class"が"Iris-versicolor"であるデータを抽出する
df = iris[(iris['petal_width'] > 1.5) & (iris['class'] == 'Iris-versicolor')]
print(df)

上記のコードを実行すると、以下のように”petal_width”が1.5より大きく、かつ”class”が”Iris-versicolor”であるデータが抽出されます。

    sepal_length  sepal_width  petal_length  petal_width            class
56           6.3          3.3           4.7          1.6  Iris-versicolor
70           5.9          3.2           4.8          1.8  Iris-versicolor
77           6.7          3.0           5.0          1.7  Iris-versicolor
83           6.0          2.7           5.1          1.6  Iris-versicolor
85           6.0          3.4           4.5          1.6  Iris-versicolor

複数の条件を組み合わせてフィルタリングを行うことで、より詳細なデータの抽出が可能となります。

大きい順や小さい順にフィルタリングする方法

データフレームのデータを大きい順や小さい順にフィルタリングすることもできます。Pandasでは、sort_values()関数を使って、データを並べ替えることができます。

以下の例では、irisデータセットを読み込み、”sepal_width”が小さい順に並べ替えています。

import pandas as pd
# irisデータセットを読み込む
iris = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data',
                   names=['sepal_length', 'sepal_width', 'petal_length', 'petal_width', 'class'])
# "sepal_width"が小さい順に並べ替える
df = iris.sort_values('sepal_width')
print(df)

上記のコードを実行すると、以下のように”sepal_width”が小さい順にデータが並べ替えられます。

     sepal_length  sepal_width  petal_length  petal_width            class
60            5.0          2.0           3.5          1.0  Iris-versicolor
62            6.0          2.2           4.0          1.0  Iris-versicolor
119           6.0          2.2           5.0          1.5   Iris-virginica
68            6.2          2.2           4.5          1.5  Iris-versicolor
41            4.5          2.3           1.3          0.3      Iris-setosa
..            ...          ...           ...          ...              ...
16            5.4          3.9           1.3          0.4      Iris-setosa
14            5.8          4.0           1.2          0.2      Iris-setosa
32            5.2          4.1           1.5          0.1      Iris-setosa
33            5.5          4.2           1.4          0.2      Iris-setosa
15            5.7          4.4           1.5          0.4      Iris-setosa

sort_values()関数は、デフォルトでは昇順に並べ替えます。降順に並べ替える場合は、引数に”ascending=False”を指定します。

以下の例では、irisデータセットを読み込み、”petal_length”が大きい順に並べ替えています。

import pandas as pd
# irisデータセットを読み込む
iris = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data',
                   names=['sepal_length', 'sepal_width', 'petal_length', 'petal_width', 'class'])
# "petal_length"が大きい順に並べ替える
df = iris.sort_values('petal_length', ascending=False)
print(df)

上記のコードを実行すると、以下のように”petal_length”が大きい順にデータが並べ替えられます。

     sepal_length  sepal_width  petal_length  petal_width           class
118           7.7          2.6           6.9          2.3  Iris-virginica
122           7.7          2.8           6.7          2.0  Iris-virginica
117           7.7          3.8           6.7          2.2  Iris-virginica
105           7.6          3.0           6.6          2.1  Iris-virginica
131           7.9          3.8           6.4          2.0  Iris-virginica
..            ...          ...           ...          ...             ...
36            5.5          3.5           1.3          0.2     Iris-setosa
35            5.0          3.2           1.2          0.2     Iris-setosa
14            5.8          4.0           1.2          0.2     Iris-setosa
13            4.3          3.0           1.1          0.1     Iris-setosa
22            4.6          3.6           1.0          0.2     Iris-setosa

sort_values()関数を使えば、データを昇順または降順に並べ替えることができます。

フィルタリング結果のデータフレーム操作

データフレームをフィルタリングした結果は、新しいデータフレームとして取り出すことができます。フィルタリングした結果に対して、別の操作を行うこともできます。

以下の例では、irisデータセットを読み込み、”petal_length”が1.5より大きいデータを抽出しています。その後、抽出したデータの”petal_width”の平均値を求めています。

import pandas as pd
# irisデータセットを読み込む
iris = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data',
                   names=['sepal_length', 'sepal_width', 'petal_length', 'petal_width', 'class'])
# "petal_length"が
# 1.5より大きいデータを抽出する
df = iris[iris['petal_length'] > 1.5]
# 抽出したデータの"petal_width"の平均値を求める
mean_petal_width = df['petal_width'].mean()
print(mean_petal_width)

上記のコードを実行すると、以下のように抽出したデータの”petal_width”の平均値が求められます。

1.5185840707964604

フィルタリングしたデータに対して、別の操作を行うことで、より高度な分析を行うことができます。

まとめ

本記事では、Pandasを使ってデータフレームをフィルタリングする方法を解説しました。

データフレームのフィルタリングは、データ分析において非常に基本的な操作であり、Pandasを使えば簡単に行うことができます。不等号を使った基本的なフィルタリング、複数の条件を組み合わせたフィルタリング、大きい順や小さい順にフィルタリングする方法、フィルタリング結果のデータフレーム操作など、Pandasを使ったデータフレームのフィルタリングについて、詳しく解説しました。

データフレームのフィルタリングは、データ分析において非常に重要な操作です。本記事で紹介した方法を使って、データ分析を効率的に行うことができるようになりましょう。