Pandasで「要素を抽出する」と言っても、状況によって色々な方法があります。
ここでは代表的な抽出方法を体系的に解説します。
サンプルコードも含めて解説するので、手を動かしながら確認できる内容にしています。
目次
行・列の抽出方法
列を抽出する
import pandas as pd
df = pd.DataFrame({
"name": ["Alice", "Bob", "Charlie"],
"age": [25, 30, 35],
"city": ["Tokyo", "Osaka", "Nagoya"]
})
# 1列抽出(Seriesとして)
print(df["name"])
# 複数列抽出(DataFrameとして)
print(df[["name", "city"]])
df["列名"]→ Seriesを返す(1次元)df[["列A", "列B"]]→ DataFrameを返す(2次元)
行を抽出する
# 先頭行(インデックス0)
print(df.loc[0]) # インデックスラベル指定
print(df.iloc[0]) # インデックス番号指定
# 複数行
print(df.loc[[0, 2]]) # 0行目と2行目
print(df.iloc[0:2]) # スライス(0〜1行目)
loc→ ラベルベースの指定(インデックス名で指定)iloc→ 数字ベースの指定(位置番号で指定)
条件抽出(フィルタリング)
単一条件
# 年齢が30以上の行を抽出
print(df[df["age"] >= 30])
複数条件
# 論理演算子を使う
print(df[(df["age"] >= 30) & (df["city"] == "Osaka")])
&(AND)、|(OR)、~(NOT)を利用
値の部分一致・完全一致
完全一致
print(df[df["city"] == "Tokyo"])
部分一致(文字列検索)
# "o" を含む city
print(df[df["city"].str.contains("o", case=False)])
特定の要素を抽出する
行列を指定して要素を取り出す
# 1行目(インデックス0)の"name"
print(df.loc[0, "name"]) # Alice
# 複数要素
print(df.loc[0:1, ["name", "age"]])
ilocで行番号・列番号を指定
print(df.iloc[0, 1]) # 0行目・1列目 → 25
特殊な抽出
isinで複数値に一致
print(df[df["city"].isin(["Tokyo", "Nagoya"])])
queryでSQLライクに抽出
print(df.query("age >= 30 and city == 'Osaka'"))
nlargest / nsmallest(ランキング抽出)
# 年齢が大きい上位2件
print(df.nlargest(2, "age"))
まとめ
- 列抽出:
df["col"],df[["col1", "col2"]] - 行抽出:
df.loc[],df.iloc[] - 条件抽出:
df[df["col"] 条件] - 要素抽出:
df.loc[row, col] - 便利関数:
isin,query,str.contains,nlargestなど
以上、Pandasで要素を抽出する方法についてでした。
最後までお読みいただき、ありがとうございました。
