本記事では以下の内容を解説しています.
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
文で取り出したcol
がcol3
であれば」という条件をつけているので,結果としてリストに加えられるのは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から目的変数と説明変数を分ける場合や,列のデータ型を揃える場合などによく使いますね.
-
DataFrameにおける特定の列は
df[['列名']]
という記法で抽出できます.今回の例では['列名']
部分にリスト内包表記を入れ込んでいます. ↩