TL;DR
strアクセサを用いることで部分一致で簡単にカラム指定のマスクが作れる。(例: df.columns.str.contains('任意の列名')
)
複数列をまとめて抽出する
ポイントは
- columnsを参照してその中に含まれる文字列を参照する。
- 最終的に出来上がるのは列を含むか否かのbooleanを含んだリストになる
なので、活用するなら
# この場合は任意の複数列を取り出す
include_list = df.columns[df.columns.str.contains('hoge_') * df.columns.str.contains('fuga_')]
df_prep = df[include_list]
# この場合は任意の複数列以外を取り出す
# Point: チルダ(~)を使うことでマスクを反転させている
exclude_list = df.columns[~df.columns.str.contains('hoge_') * ~df.columns.str.contains('fuga_')]
df_prep = df[exclude_list]
またオプションには case
(大文字小文字の区別), regex
(正規表現パターンの利用) があるので、柔軟につかえる。
strアクセサの応用
今回はカラムに対して行ったが、たとえば特定の列内から任意の文字列を抽出したいときにも同様にできる。
df['user'].str.contains('Ruri')