python PR

【python】データ分析のためのpandasの使い方③:データフレームのフィルタリング

記事内に商品プロモーションを含む場合があります

今回はpandasチュートリアルの三回目になっています。

前回のがまだという方は↓の記事を参照ください。

【python】データ分析のための「pandas」チュートリアル②:データフレームの中を見よう!

今回はデータフレームのフィルタリング操作を学んでいきましょう!!

全てサンプルコードを記載してあります。各々のpythonの環境で実際に手を動かしながら読み進めていってください。 サクッとやりたい方は、google colaboratoryが簡単でおすすめです。

pandasでフィルタリングとは?

Pythonでデータ分析をする際に、データフレームをフィルタリングすることはよくあります。特定の条件に合致する行のみを取り出すことで、分析に必要なデータだけを抽出できます。 具体的には、

  • 指定したカラムの値が3以上の物を抽出
  • 文字列列から、特定の文字列を含む行を抽出
  • 複数の条件で抽出

このように、あなたが条件を指定して、それに沿ったデータだけを抽出する事が出来るのです。

 

データフレームのフィルタリング方法

では実際にやり方を見ていきましょう。 データフレームをフィルタリングするために、pandasでは[]演算子を使用します。具体的には、以下のように条件を指定することで、条件に合致する行だけを抽出できます。

df[条件式]

複数条件での指定

また、条件を複数指定する場合は、&(AND)や|(OR)を使用して条件を結合します。以下に例を示します。

df[(条件式1) & (条件式2)] df[(条件式1) | (条件式2)]

エクセルで使った事がある人も多いと思いますが簡単に説明します。

ANDの場合、両方の条件にあてはまる場合のみTrueとなります。 ORの場合は、どちらかの条件にあてはまればTrueになります。

データの準備

ではまずデータセットの準備をしましょう。 前回までと同じくirisデータを使いましょう。

これでデータフレームが作成されました! ここまでの流れは大丈夫ですね?

 

 

実際にフィルタリングしてみよう

ではさっそくフィルタリングしてみましょう。 petal_lengthが4より大きい行だけを抽出してみましょう。 以下のようにフィルタリングを行います。

この結果は↓の画像の様になり、petal_lengthカラムが4より大きいレコードになりました。

ちなみに4以上や、4より小さい値を抽出したい時は下記のように書きます。

このように、条件式を書いてデータフレームの中に挿入するだけで、指定した条件を満たす行を抽出することができます。

ANDとORを使った抽出

条件によっては複数の列を参照する必要がある場合もありますね。

その場合は、&(AND)や|(OR)を使用して条件を結合しましょう。 まずはANDです。

これで↓のように”sepal_length”が7以上かつ”petal_length”が6以下の行を抽出できました。

続いてORの使い方を見ていきましょう。 この場合は|(パイプ)を使います。

これですと、”sepal_length”が7以上か”petal_length”が6以下の行を抽出することが出来ます。

query()を使ってANDも出来る

pandasでは、query()メソッドを使って条件式を文字列で指定することもできます。
これですと、上の画像と同じ結果となります。 どちらを使っても大丈夫ですが、個人的にはquery()を使う事はあまりないです。

文字列で指定

もちろん数値だけでなく文字列でも指定する事ができます。

今回の場合ですと、speciesが文字列のカテゴリーになっていますね。 こういったカテゴリーカラムで、特定のカテゴリーだけ抽出したいって事がおおいですね。 virginicaのレコードだけ抽出してみましょう。

簡単ですね、イコールの場合は==と2つ並ぶ点に注意してください。

isin()を使ってOR条件でフィルタリングする

pandasでは、isin()メソッドを使っても複数の値に一致する行を抽出することができます。たとえば、species列がvirginicaまたはversicolorである行を抽出するには以下のようにします。

()や[]の括り方が難しいですね~! 関数には()でデータフレームに[]というイメージでいきましょう。

not演算子でフィルタリングも出来る

not演算子を使用することで、条件式を満たさないデータを抽出できます。

not演算子は、~(チルダ)を用いて表現します。

この書き方も良く使いますね~。カテゴリーカラムなどで、あるカテゴリー以外を抽出したい時とかに楽です。 書き方は↓を見てください。~を入れる場所が少し難しいですね。

文字型だけでなく、もちろん数値型にも使えます。
こうする事で、sepal_lengthが5以下のものだけ抽出できます。 (この場合わざわざ’~’を付けなくても’>’を'<‘にすれば良いだけですが、、)

まとめ

いかがでしたでしょうか?
データフレームのフィルタリング方法をマルっと紹介しました。
今回教えた事を組み合わせれば、自由自在にデータフレームをフィルタリングできます。
これが出来ればデータ分析の第一歩という感じですね!
あなたにおススメの記事