[DataFrame] カラムを正規表現で検索するなら、matchメソッドとlocメソッドを使うと簡単な件

はじめに

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のカラムを正規表現で検索する方法について、サンプルコードと解説を記事にしました。

最後まで読んで頂き、ありがとうございます!

参考

初学者の方向け、正規表現について分かりやす〜くまとめた記事はこちら。

PON3

PON3

5年くらい前に、30代完全未経験から独学でWeb系のソフトウェアエンジニアになった人。 現在はフリーランスエンジニアとして、大阪の自宅からフルリモートで東京の自社開発企業のお仕事をしている。 主戦場はバックエンドで、Go言語でのAPI開発や、Pythonでのデータ分析が武器。 とは言いつつ、フロントエンドをSPAを実装したり、IaCでクラウドインフラの設計構築したり、スクラム開発でプロジェクト運営したりするなんでも屋。 いつも、ググってきては誰かが書いてくれた記事を見て開発していたが、もらってばかりでなく世の中に返すこともしたいと思い、技術ブログをはじめる。 妻と2歳になる娘の3人暮らし。 何かご用件がある方は、TwitterのDMからどうぞ。