はじめに
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を使ったデータフレームのフィルタリングについて、詳しく解説しました。
データフレームのフィルタリングは、データ分析において非常に重要な操作です。本記事で紹介した方法を使って、データ分析を効率的に行うことができるようになりましょう。