PythonのPandasで「複数列の抽出」を行う方法について、基礎から応用まで詳しく解説します。
データ分析や前処理では頻出の操作なので、しっかり理解しておくと便利です。
目次
基本的な複数列の抽出
PandasのDataFrame
から複数列を取り出すには、列名のリストを[]
に渡すのが基本です。
import pandas as pd
# サンプルデータ
df = pd.DataFrame({
"name": ["A", "B", "C"],
"age": [23, 34, 29],
"city": ["Tokyo", "Osaka", "Nagoya"]
})
# 複数列の抽出
subset = df[["name", "city"]]
print(subset)
df["name"]
は Series(1次元)df[["name"]]
は DataFrame(2次元)df[["name", "city"]]
と書くと、複数列をまとめて取り出せる
列インデックス番号での抽出
列名ではなく、列番号(位置)で抽出したい場合は .iloc
を使います。
# 0番目と2番目の列を取得
subset = df.iloc[:, [0, 2]]
print(subset)
iloc
は整数インデックスでの指定なので、列名がわからないときや位置で処理したいときに便利です。
列名の範囲を指定して抽出
連続する列を範囲で抽出する場合は、スライスが使えます。
# 0〜1列目までを抽出
subset = df.iloc[:, 0:2]
print(subset)
列名リストを変数で管理する
列名が長かったり、多数の列を選びたいときは、リストを変数にしておくと便利です。
cols = ["name", "age"]
subset = df[cols]
print(subset)
列名の条件で抽出
正規表現や文字列検索で列を選ぶことも可能です。
部分一致で列を抽出
subset = df.filter(like="a") # "a"を含む列名を抽出
print(subset)
正規表現で抽出
subset = df.filter(regex="^c") # "c"で始まる列名を抽出
print(subset)
列を並べ替えて抽出
複数列を抽出するとき、同時に順序を変更することもできます。
subset = df[["city", "name"]]
print(subset)
応用:関数を使った列選択
動的に列を選ぶ場合は、リスト内包表記や条件を組み合わせます。
# "a"を含む列だけ選択
cols = [col for col in df.columns if "a" in col]
subset = df[cols]
print(subset)
まとめ
df[["col1", "col2"]]
… 基本の複数列抽出.iloc
… 位置ベースで列抽出.filter(like=…, regex=…)
… 条件ベースで列抽出- リスト変数に列名を格納 … 大量の列や動的処理に便利
以上、PythonのPandasで複数列の抽出についてでした。
最後までお読みいただき、ありがとうございました。