PythonのPandasの複数条件での抽出方法について

データフレーム,イメージ

AI実装検定のご案内

PythonのPandasで「複数条件での抽出」を行う方法について、実務的に役立つように整理して詳しく解説します。

特にDataFrameを扱う際に条件を組み合わせてデータをフィルタリングする操作は頻出ですので、基本から応用までまとめます。

目次

基本:単一条件での抽出

まずは1つの条件から。

import pandas as pd

# サンプルデータ
data = {
    "name": ["Alice", "Bob", "Charlie", "David", "Eve"],
    "age": [25, 30, 35, 40, 45],
    "city": ["Tokyo", "Osaka", "Tokyo", "Nagoya", "Osaka"],
}
df = pd.DataFrame(data)

# 例: ageが30以上
df[df["age"] >= 30]

複数条件の組み合わせ(AND, OR)

PandasではPythonの論理演算子 (and, or) ではなく、以下を使います。

  • & … AND(かつ)
  • | … OR(または)
  • ~ … NOT(否定)

条件は必ず 括弧 () で囲む必要があります。

# AND条件: ageが30以上 かつ cityが"Osaka"
df[(df["age"] >= 30) & (df["city"] == "Osaka")]

# OR条件: cityが"Tokyo" または ageが40以上
df[(df["city"] == "Tokyo") | (df["age"] >= 40)]

# NOT条件: cityが"Tokyo" ではない
df[~(df["city"] == "Tokyo")]

複数条件をisin()で簡潔に書く

# cityがTokyoまたはOsaka
df[df["city"].isin(["Tokyo", "Osaka"])]

複数条件をquery()で書く

queryを使うとSQLライクな記法になり、可読性が上がります。

# AND条件
df.query("age >= 30 and city == 'Osaka'")

# OR条件
df.query("city == 'Tokyo' or age >= 40")

# NOT条件
df.query("city != 'Tokyo'")

複数列をまとめて条件にする(複雑条件)

例1: 範囲条件

# 30 <= age <= 40
df[(df["age"] >= 30) & (df["age"] <= 40)]

例2: 複数列の比較

# ageと別の列の比較が必要な場合
df["score"] = [60, 75, 70, 90, 85]
df[df["age"] > df["score"]]

応用例:複数条件のリスト化・動的フィルタリング

例えばユーザー入力に応じて条件を動的に作りたい場合

conditions = (df["age"] >= 30) & (df["city"].isin(["Tokyo", "Osaka"]))
df[conditions]

よくある落とし穴

  • and / or を使うとエラーになる → & / | を使う
  • 括弧を省略すると優先順位の関係でエラーや誤動作する
  • 文字列比較の際はクォートが必要(city == "Tokyo"

まとめ

  • 基本は df[条件]
  • ANDは&、ORは|、NOTは~
  • 条件は必ず()で囲む
  • isin()query() を使うと可読性が上がる
  • 複数列の比較や動的条件にも対応可能

以上、PythonのPandasの複数条件での抽出方法についてでした。

最後までお読みいただき、ありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次