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で要素を抽出する方法についてでした。
最後までお読みいただき、ありがとうございました。