【Python入門】NumPyで条件に合うデータを抽出する方法|フィルタリングの基本と応用

Python

Pythonでデータ分析や科学計算を行う際、**データの一部を条件に応じて抽出する(フィルタリング)**作業はとても重要です。NumPyには、こうした処理を効率的に行う機能が備わっています。

この記事では、NumPyを使って 特定の条件に合う要素だけを取り出す方法を、初心者の方にも分かりやすく解説します。

この記事の対象

  • NumPyでデータを選択する場合の基本的な方法を知りたい方
  • NumPyで条件に合致したデータを選択する方法を知りたい方
  • NumPyで複数条件でデータを選択する方法を知りたい方
スポンサーリンク
スポンサーリンク

基本:条件に合う要素だけを取り出す

まずは、配列の中から「3より大きい要素」を取り出す例を見てみましょう。

import numpy as np

data = np.array([1, 2, 3, 4, 5])

# 条件を定義
condition = data > 3

# 条件に合致するデータを抽出
filtered_data = data[condition]

print("元のデータ:", data)
print("3より大きいデータ:", filtered_data)

結果

元のデータ: [1 2 3 4 5]
3より大きいデータ: [4 5]

解説

  • data > 3 は、条件に合う要素だけ True になる「ブール配列」を作ります。
  • そのブール配列を使って、元のデータから該当する要素を抽出しています。

複数条件を組み合わせて選択する

より複雑な条件を扱う場合、条件を組み合わせてデータをフィルタリングすることがあります。NumPyでは、論理演算子(&|~)を使用して条件を組み合わせることができます。

「2より大きく、かつ偶数の要素」だけを抽出してみましょう。

import numpy as np

data = np.array([1, 2, 3, 4, 5])

# 2より大きい AND 偶数 の条件
condition = (data > 2) & (data % 2 == 0)

filtered_data = data[condition]

print("複数条件に合うデータ:", filtered_data)

この例では、「2より大きく、かつ偶数の要素」を選択しています。

結果

複数条件に合うデータ: [4]

解説

  • & は論理積(AND)を意味します
  • 条件式は カッコで囲む必要があるので注意してください

応用:欠損値(NaN)を除外する

NumPyでは、np.isnan() を使って NaN を判別できます。

import numpy as np

data = np.array([1, np.nan, 2, np.nan, 3])
filtered_data = data[~np.isnan(data)]
print("NaNを除いたデータ:", filtered_data)

結果

NaNを除いたデータ: [1. 2. 3.]

小数の比較:許容誤差を使う

小数の誤差を考慮した比較では np.isclose() を使うと便利です。

import numpy as np

a = np.array([1.0000001, 2.0, 3.0])
b = np.array([1.0, 2.0, 3.0])
print(np.isclose(a, b))

結果

[ True  True  True]

効率的にインデックスを取得する:np.where

条件に合う「インデックス」を取り出すには np.where() が使えます。

import numpy as np

data = np.array([1, 2, 3, 4, 5])
indices = np.where(data > 3)
print("3より大きい要素のインデックス:", indices)
print("該当データ:", data[indices])

結果

3より大きい要素のインデックス: (array([3, 4], dtype=int64),)
該当データ: [4 5]

まとめ

やりたいこと方法
単一条件で抽出data[data > 3]
複数条件で抽出(data > 2) & (data % 2 == 0)
NaNの除去~np.isnan(data)
小数の誤差を考慮np.isclose(a, b)
条件の位置取得np.where(data > x)

初心者向け補足

  • NumPyは配列操作に特化した高速ライブラリなので、Pythonのfor文よりも効率的です。
  • データ前処理(クリーニング)ではフィルタ処理が必須です。
  • 複雑な条件式ほど、カッコの使い方に注意!

おすすめ関連リンク

タイトルとURLをコピーしました