【Python】pandasを利用した文字検索の方法と性能比較

東京拠点 本橋です

私の行っているプロジェクトでは開発言語の一部にPythonを使用しています。
csvなどの表形式データを処理するのにpandasライブラリはとても便利ですね。
そしてpandasを使ってSQLと同じように検索をする事が多いと思います。

「pandasで使って文字データに対する曖昧検索の処理をしたい。
けど、どうすればいいの?」

という事があったので検証してみました。

 

pandasにも曖昧検索用に以下の関数が用意されています。
 ①・match(正規表現)
 ②・contains(正規表現)
 ③・contains(検索文字)

どれを選べば良いのでしょうか・・・
技術検証を兼ねて調査してみました。

①match関数を使って正規表現で検索
 pettern = ‘.*’ + 【検索したい文字列】 + ‘.*’
 df_1[df_1[‘文字データ項目’].str.match(pettern)]

②contains関数を使って正規表現で検索
 pettern = u'(^(?=.*’ + 【検索したい文字列】 + ‘))’
 df_1[df_1[‘文字データ項目’].str.contains(pettern)]

③contains関数を使って検索文字のみで検索
 df_1[df_1[‘文字データ項目’].str.contains(【検索したい文字列】)]

・性能比較

 データ量:50項目20万行の中から80行のデータ抽出に対して実施

・結果

 ①・match(正規表現) ・・・・ 133ms
 ②・contains(正規表現)・・・・ 156ms
 ③・contains(検索文字)・・・・  96ms

containsは曖昧検索にも対応している関数なので
わざわざ正規表現にすることでかなり遅くなるようです
今回は正規表現で難しい事をしたいわけでもないので、
contains(検索文字)を採用!