はじめに
DataFrameでカラムを検索するときに、正規表現を使いたい。
そういった場合のサンプルコード作ったので記事にしておきます。
参考にして頂けるとうれしいです!
動作確認ができるサンプルコード
解説
1. 性別カラムが「male」のものを検索
df[df['gender'].str.match('male')]
まずは、手始めにこちら完全一致のパターンです。
df[カラム名]
として、Series
にした後にstr
アクセサを使って、match
メソッドを使用します。
match
メソッドの引数には、検索したいパターンを指定した正規表現を渡します。
今回はmale
という文字列に完全一致するもの…としています。
df['gender'].str.match('male')
この部分だけで、正規表現にマッチしているか否かのboolを格納したSeries
を返します。
それをdfに渡してやると、検索結果に該当するDataFrameが取得できるという寸法です。
ちなみに、完全一致の場合は、ふつーに
df[df['gender'] == 'male']
↑このように書いた方が良いかと思いますが、今回は無理やり正規表現を使った状態にしています。笑
2. 名前カラムでどこかに「a」が入っているものを検索
df[df['name'].str.match('.*a.*')]
次に、部分一致のパターンです。
このように、正規表現の部分だけ変更するだけで、簡単に検索パターンを変更できます。
3. 名前カラムで「ro」で終わるものを検索
df[df['name'].str.match('.*ro$')]
続いて、後方一致のパターンです。
同じく、正規表現部分だけで変更できます。
簡単に検索パターンを変更できるので、正規表現って良いですよねー!
4. 本題: 「score_」で始まるカラムを検索
お待たせしました本題です。
df.loc[:, df.columns.str.match('^score_.*')]
こんな風にしてscore_
で始まるカラムを検索できます。
df.columns.str.match('^score_.*')
とすることで、各カラムがscore_
から始まるか否かのboolを格納したSeries
を返します。
また、match
メソッドはSeries
型を待っているので、DataFrameのカラム一覧をSeries
化して渡しています。
このような形で、score_
から始まるか否かのboolを格納したSeries
が取得できれば、これをloc
メソッドに渡して、検索結果に該当するカラムを取得します。
おわりに
今日は、DataFrameのカラムを正規表現で検索する方法について、サンプルコードと解説を記事にしました。
最後まで読んで頂き、ありがとうございます!
参考
初学者の方向け、正規表現について分かりやす〜くまとめた記事はこちら。