【pandas】DataFrameから一部/任意の列を抽出する方法

本記事では以下の内容を解説しています.

DateFrameから

  • 一部の列を抽出(特定の列だけ or 特定の列以外)
  • 列名に任意の文字列が含まれている列

事前準備

まずはサンプルのDataFrameを作成します.


import pandas as pd

df = pd.DataFrame({
    'col1': [1, 2, 3],
    'col2': [10, 20, 30],
    'col3': [10, 40, 90],
    'col4_flag': [1, 0, 0]
})
df
col1 col2 col3 col4_flag
0 1 10 10 1
1 2 20 40 0
2 3 30 90 0

一部の列を抽出(特定の列だけ or 特定の列以外)

特定の列だけ抽出

サンプルのDaraFrameのうち,col3列のみを抽出します.


df[[col for col in df.columns if col == 'col3']]
col3
0 10
1 40
2 90

DataFrame から列をひとつずつ取り出してリストに加えています.
ただしif文で「for文で取り出したcolcol3であれば」という条件をつけているので,結果としてリストに加えられるのはcol3列だけになります.1

参考

なお,1つの列だけを取得したい場合df[['col3']]で同じことができます.


df[['col3']]

col3
0 10
1 40
2 90

単独の列を抽出するだけならdf[['col3']]を使うことが普通ですし,好ましいですが,今回は次項の「特定の列以外を抽出」と比較するためにあえて使っています.

特定の列以外を抽出

col3列以外を抽出したい場合は以下のようにします.
(前項のコードにおけるif文の条件式を==!=としただけです)


# DataFrameの列のうち,col3列以外を取り出す
df[[col for col in df.columns if col != 'col3']]
col1 col2 col4_flag
0 1 10 1
1 2 20 0
2 3 30 0

指定した複数の列以外を抽出

col1, col3以外の列を抽出したい場合はリストを使って以下のようにします.


# DataFrameの列のうち,リストで定義された列以外を取り出す.
selected_col = ['col1', 'col3']
df[[col for col in df.columns if col not in selected_col]]
col2 col4_flag
0 10 1
1 20 0
2 30 0

if col not in selected_col部分でselected_colにある列はリストに含めないようにしています.

列名に任意の文字列が含まれている列

列名に「flag」が含まれる列を抽出

for文で取り出したDataFrameの列名についてin演算子で文字列の有無を確認します.
今回はflagという文字列を含む列を抽出しています.


# 列名にflagが含まれている列だけを抽出
df[[col for col in df.columns if 'flag' in col]]
col4_flag
0 1
1 0
2 0

ひとこと

DataFrameから目的変数と説明変数を分ける場合や,列のデータ型を揃える場合などによく使いますね.


  1. DataFrameにおける特定の列はdf[['列名']]という記法で抽出できます.今回の例では['列名']部分にリスト内包表記を入れ込んでいます.