東京拠点 本橋です
私の行っているプロジェクトでは開発言語の一部に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(検索文字)を採用!