Python 列名部分一致で列を複数選択する「pandasでstr.contains()」

 列名が山ほどあって、列名(カラム名)に特定の文字列がある列だけを抽出したい場合もあるかもしれません。その雛形コードを載せました。

例題データは、機械学習データセットで有名なアイリスを用いました。これのcsvはネットで検索すれば出てきて、例えばのリンクはこちらです。https://gist.github.com/netj/8836201

import pandas as pd

df = pd.read_csv('iris-dataset.csv')
df

このデータセットは下図のように、5列あります。ここで、sepal_length と petal_lengthの2列を抽出したいとします。共通文字列は「length」です。

f:id:HK29:20210707225207p:plain

下図のように、共通文字列「length」をキーワードにstr.contains()を使用します。

columns_bool = df.columns.str.contains('length')
columns_bool

すると、下図のようにプール型で返します。

f:id:HK29:20210707225319p:plain

これを利用して、下記のようにすることでTrueの列を抽出します。

df2 = df.loc[:, columns_bool]
df2

下図が、最終結果です。「length」の列名だけが抽出されています。

f:id:HK29:20210707225357p:plain

以上

<広告>