PythonのPandasで特定のデータを抽出する方法について

Python,イメージ

AI実装検定のご案内

Pandasで「特定のデータを抽出する」といっても、目的や条件によっていくつかの代表的な方法があります。

ここでは基本から応用まで段階的に詳しく解説します。

目次

基本:条件で行を抽出する

Pandasでは、df[条件式] という形で条件に合致する行を取り出せます。

import pandas as pd

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

# 年齢が30以上の人を抽出
df_filtered = df[df["age"] >= 30]
print(df_filtered)

複数条件で抽出する

条件を組み合わせるときは &(かつ)、|(または)を使います。

括弧 () を忘れるとエラーになるので注意です。

# 東京に住んでいて、年齢が30歳以上の人
df_filtered = df[(df["city"] == "Tokyo") & (df["age"] >= 30)]
print(df_filtered)

部分一致や文字列条件で抽出

str.containsstr.startswith を使うと便利です。

# city列が"To"で始まる人を抽出
df_filtered = df[df["city"].str.startswith("To")]
print(df_filtered)

複数の値に一致する行を抽出 (isin)

複数の候補から一致するものを取りたい場合は isin を使います。

# cityがTokyoかOsakaの人
df_filtered = df[df["city"].isin(["Tokyo", "Osaka"])]
print(df_filtered)

列だけを抽出

行ではなく列を抽出したいときは、列名で指定します。

# nameとcityだけ取り出す
df_selected = df[["name", "city"]]
print(df_selected)

特定の行番号やインデックスで抽出

インデックスや行番号で取りたい場合は lociloc を使います。

# インデックスで指定(ラベルベース)
print(df.loc[2])  # Charlieの行

# 行番号で指定(0始まり)
print(df.iloc[1])  # Bobの行

複雑な抽出:クエリ構文(queryメソッド)

SQLに近い書き方ができるので、複数条件がある場合に便利です。

# ageが30以上、かつcityがTokyoの人
df_filtered = df.query("age >= 30 and city == 'Tokyo'")
print(df_filtered)

応用:ソートやグルーピング後の抽出

抽出と合わせて sort_valuesgroupby を組み合わせることも多いです。

# 年齢が高い順に並べて上位2件を抽出
df_sorted = df.sort_values("age", ascending=False).head(2)
print(df_sorted)

まとめ

Pandasでデータを抽出する代表的な方法は次の通りです。

  • 条件式で行を抽出df[df["col"] > 値]
  • 複数条件&, |, ~
  • 文字列条件str.contains, startswith, endswith
  • 複数候補一致isin
  • 列抽出df[["col1", "col2"]]
  • インデックス抽出loc, iloc
  • SQL風に抽出query
  • ソートやグループ化後に抽出sort_values, groupby

以上、PythonのPandasで特定のデータを抽出する方法についてでした。

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

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