polars講座

【polars】filter:行の抽出【データフレーム処理】

こんにちは,shun(@datasciencemore)です!!

記念すべきデータフレーム処理の1回目は,filter:行の抽出についてです!

filterは,行を抽出するメソッドです.

条件を指定してあげると条件を満たした行を抽出してくれます.

filterは今までに何回か使ってきたので少しはなじみがあると思います.

このイメージ,とても大事ですので頭にこびりつけてくださいね

1.filterの内部処理

filterは,実は

① 条件を判定し,行ごとに論理値ベクトル(True,False)を作成する.
② ①の論理値ベクトルをデータフレームに記録する.
③ ②でTrueであった行のみを抽出する.

ということを順番に内部でしています.

???

大丈夫,これも例をみればイメージがつかめるよ!

こちらがqueryの内部処理のイメージになります.

左上のデータフレームは,とある会社の従業員の性別(gender)と身長(height)を表すとしましょう.

この状態でfilterを適用するとします.

そうするとこのような流れで処理が実行されます.

① gender == "F"を判定し,行ごとに論理値ベクトル(TRUE,FALSE)を作成する.
② ①の論理値ベクトルをdfに記録する.
③ ②でTRUEとなった行のみを抽出する.

要するに,

条件を判定して,論理値ベクトルを作成し,その論理値ベクトルをもとに抽出される行が決定される!!

ということです.

条件を判定するには,numpyのベクトル処理でもやった比較演算子を使用します.

is_betweenとis_inだけ若干,numpyのときの違いますが,この使い方も結構するので慣れてください.

2.コーディング例

filterを使用して様々な条件で行を抽出しましょう!

今回は,diamondsデータを利用します.

0.準備

一部,badの用法でも例示することがあります.
goodと比較して,どちらがいいか確認してみてください.
badの用法も重要です.
前述のとおり,goodとbadはあくまで僕の感想なので,どちらがいいか,最終的にはご自身で決めていただければと思います.

1.price列が337の行を抽出

2.depth列が62以上の行を抽出

3.carat列が0.23~0.27の行を抽出

4.color列がEの行を抽出

5.color列がE以外の行を抽出

6.color列がIまたはJの行を抽出

7.depth列が62以上かつcolor列がHの行を抽出(AND)

8.depth列が62以上またはcolor列がHの行を抽出(OR)

9.(depth列が62以上かつcolor列がH)ではない行を抽出(NOT)

10.price列が337の行を抽出 (変数を使用)

まとめ

今回は,filter:行の抽出について学習してきました.

filterを使用すると複雑な条件でも可読性が高く簡潔なコーディングをすることができます.

ぜひfilterを使いこなせるようになってください!

それでは,お疲れさまでした!!

次回

-polars講座