【第9回】【初心者向け】Pandasの条件抽出・フィルタリングの使い方を実例付きでやさしく解説

Pythonのデータ分析ライブラリ「Pandas」を使って、条件に基づいてDataFrameからデータを絞り込む方法(フィルタリング)をわかりやすく解説します。単純な条件指定から複雑な条件の組み合わせまで、例と一緒にステップごとに見ていきましょう!

1. サンプルデータの作成

まずは練習用に以下のようなサンプルDataFrameを用意します。

import pandas as pd

df = pd.DataFrame({
    "名前": ["太郎", "花子", "次郎", "美香", "健一", "恵子", "翔", "茜", "隆", "葵"],
    "年齢": [23, 29, 35, 42, 18, 33, 27, 24, 31, 30],
    "職業": ["エンジニア", "デザイナー", "教師", "医師", "学生", "看護師", "プログラマー", "販売員", "弁護士", "研究者"],
    "年収(円)": [4500000, 5500000, 4900000, 7300000, 0, 4000000, 6000000, 3200000, 8000000, 5800000],
    "居住地": ["東京", "大阪", "名古屋", "札幌", "福岡", "東京", "神戸", "仙台", "横浜", "千葉"],
    "勤続年数": [2, 4, 10, 15, 1, 5, 3, 1, 12, 8]
})

筆者の体験談と失敗談

私が初めてPandasでフィルタリングを行ったとき、andorをそのまま使ってエラーを出してしまいました。

# 間違った例:Pythonの論理演算子をそのまま使ってしまう
df[(df['年収(円)'] >= 4000000) and (df['居住地'] == '東京')]

このコードはValueErrorになります。PandasのSeries同士の論理演算では、&|を使う必要があると知りませんでした。

正しい書き方:

# 正しい:ビット演算子(& や |)を使用する
df[(df['年収(円)'] >= 4000000) & (df['居住地'] == '東京')]

さらに、条件式全体を括弧で囲むことも重要です。これを怠ると構文エラーになることもあります。

改善策: 私は「Pythonの論理演算子とPandasの演算子は違う」と意識するため、& や | はSeries用とメモしてキーボードの近くに貼りました。

フィルタリングは直感的に見えて、意外とハマりやすいポイントです。エラーを経験してこそ、しっかり身につきます。

2. 単純なフィルタリング(1条件)

2.1 居住地が「東京」の人だけを抽出する

df[df['居住地'] == '東京']

出力例:


    名前   年齢    職業    年収(円) 居住地 勤続年数
0   太郎  23  エンジニア 4500000 東京 2
5   恵子  33  看護師    4000000 東京 5

▶️ 特定の値(ここでは「東京」)にマッチするデータを簡単に抽出できます。

3. 範囲でフィルタリング(複数条件のAND)

3.1 年収が400万円以上600万円未満の人を抽出する

df[(df['年収(円)'] >= 4000000) & (df['年収(円)'] < 6000000)]

出力例:


    名前   年齢    職業    年収(円) 居住地 勤続年数
0   太郎  23  エンジニア 4500000 東京 2
1   花子  29  デザイナー 5500000 大阪 4
2   次郎  35  教師    4900000 名古屋 10
5   恵子  33  看護師   4000000 東京 5
9   葵    30  研究者   5800000 千葉 8

▶️ AND条件(&)を使うと、2つ以上の条件を両方満たすデータだけを抽出できます。

4. 複雑な条件(OR条件を含む)

4.1 年収が400万円以上600万円未満「または」居住地が札幌の人を抽出する

df[((df['年収(円)'] >= 4000000) & (df['年収(円)'] < 6000000)) | (df['居住地'] == '札幌')]

出力例:


    名前   年齢    職業    年収(円) 居住地 勤続年数
0   太郎  23  エンジニア 4500000 東京 2
1   花子  29  デザイナー 5500000 大阪 4
2   次郎  35  教師    4900000 名古屋 10
3   美香  42  医師    7300000 札幌 15
5   恵子  33  看護師   4000000 東京 5
9   葵    30  研究者   5800000 千葉 8

▶️ OR条件(|)では、いずれか1つの条件に合えばデータが取り出されます。

5. query関数を使ったフィルタリング(簡単記法)

さらに便利な方法として、query()メソッドを使うとSQLライクに書けます。

▶️ queryの公式ドキュメントも参考にしてください:
pandas DataFrame query Documentation

5.1 queryで年収500万円以上の人を抽出する

df.query('年収(円) >= 5000000')

5.2 queryで複数条件(年収400万以上か居住地が東京)

df.query('(年収(円) >= 4000000) or (居住地 == "東京")')

▶️ 複雑な条件でも、コードがスッキリ書けるのでおすすめです。

6. まとめ

  • 単純な条件(列 == 値)で絞り込める
  • 範囲指定には & を使い、両方の条件を満たす行を抽出
  • 複雑な条件には | を使い、どちらか一方でも満たす行を抽出
  • query関数を使うとさらに簡潔に書ける

次回は、「ソートする方法」について紹介していきます!

▲ ページトップへ戻る

コメント

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