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でフィルタリングを行ったとき、and
やor
をそのまま使ってエラーを出してしまいました。
# 間違った例: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関数を使うとさらに簡潔に書ける
次回は、「ソートする方法」について紹介していきます!
コメント