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.contains
や str.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)
特定の行番号やインデックスで抽出
インデックスや行番号で取りたい場合は loc
と iloc
を使います。
# インデックスで指定(ラベルベース)
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_values
や groupby
を組み合わせることも多いです。
# 年齢が高い順に並べて上位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で特定のデータを抽出する方法についてでした。
最後までお読みいただき、ありがとうございました。