特定のデータだけを狙い撃ち!numpyのフィルタリングをマスターしよう
こんにちは。ゆうせいです。
前回は、包丁で切り出すようにデータの範囲を指定するスライスについてお話ししましたね。でも、実際のデータ分析では「3行目から 5行目」といった場所による指定だけでなく、「テストで 80 点以上の人だけ」とか「マイナスのデータだけ」というように、中身の条件でデータを選びたい場面が圧倒的に多いのです。
そんなときに活躍するのが、今回解説する フィルタ(フィルタリング) です。
皆さんは、砂場から宝物を探すとき、大きな「ふるい」を使ったことはありませんか。条件に合うものだけを残し、それ以外を落としてしまう。プログラミングのフィルタリングも、まさにあの「ふるい」と同じ役割を果たしてくれます!
フィルタリングの正体は「YesかNoか」
numpyでフィルタリングを行うとき、裏側では ブールインデックス参照 という仕組みが動いています。
少し難しい名前に聞こえますが、中身はシンプルです。配列の要素一つひとつに対して、「条件に合っていますか?」と問いかけ、 True(はい)か False (いいえ)という結果のリストを作っているだけなのです。
例えば、 [10, 20, 30] というデータに対して、「 15 より大きいか」というフィルタをかけると、次のような Yes/No のリストが作られます。
False, True, True
この Trueの場所にある数字だけを拾い上げるのが、フィルタリングの正体です。
比較演算子で「ふるい」を作る
フィルタの条件を作るには、数学でもおなじみの比較演算子を使います。
- > (より大きい)
- < (より小さい)
- >= (以上)
- <= (以下)
- == (等しい)
高校生の皆さんが数学の授業で使う記号とほとんど同じですね!
例えば、配列 data の中から0 未満の数字だけを取り出したいときは、次のように書きます。
結果 = data[data < 0]
カッコの中に条件式をそのまま放り込むだけでいいなんて、とっても直感的だと思いませんか。
フィルタリングのメリットとデメリット
この機能を使いこなすと、データ処理の効率が劇的に変わります。
メリット
- 複雑な条件も一発: if文を何回も書かなくても、一行で欲しいデータが手に入ります。
- データの修正が楽: 「 0未満のデータをすべて0に書き換える」といった操作も、フィルタを使えば一瞬です。
デメリット(注意点)
複数の条件を組み合わせるとき(例えば「 50以上 かつ 80」など)は、Python標準の and や or が使えません。
代わりに、 & (かつ)や | (または)という記号を使い、それぞれの条件をカッコ () で囲む必要があります。ここだけは、書き方のルールとしてしっかり覚えておきましょう!
フィルタリングの書き方まとめ
よく使う条件の組み合わせ方を表にしました。
| やりたいこと | 書き方のイメージ |
| ある数字より大きいもの | data[data > 100] |
| 偶数だけを取り出す | data[data % 2 == 0] |
| 2つの条件の両方に合うもの | data[(data > 0) & (data < 100)] |
| どちらかの条件に合うもの | data[(data < 0) | (data > 100)] |
実際にコードで「ふるい」にかけてみよう!
それでは、ランダムな数字の中から、特定の条件に合うものだけを抜き出してみましょう。
import numpy as np-10から10までのランダムな整数を10個作る
data = np.random.randint(-10, 11, 10)
print("元のデータ:", data)プラスの数字だけをフィルタリング
positive_data = data[data > 0]
print("プラスのみ:", positive_data)5より大きい、または -5より小さいものを抽出
outliers = data[(data > 5) | (data < -5)]
print("端っこの値:", outliers)実行するたびに、条件に合った数字だけが選ばれて表示されるはずです。まるで魔法のように、欲しいデータだけが手元に残りますね。
データの目利きになるための指針
フィルタリングをマスターした皆さんは、もう膨大なデータに圧倒されることはありません。自分の意志で、必要なデータだけを見つめることができるようになったからです!
これからの学習の指針として、ぜひ以下に挑戦してみてください。
- フィルタリングを使って、異常値(極端に大きすぎる、または小さすぎる数字)を見つけて削除する練習をしてみる。
- 条件に合う要素の「場所(番号)」だけを知りたいときに便利な
np.where()という関数について調べてみる。 - 2次元の表データに対して、特定の列の条件で「行まるごと」を抜き出す操作に挑戦してみる。
「もし〜なら」という思考を、データ全体に対して一瞬で適用できる快感を、ぜひたくさん味わってください。
セイ・コンサルティング・グループでは新人エンジニア研修のアシスタント講師を募集しています。
投稿者プロフィール


