Pandasで正規表現を使って検索する

Pandasで正規表現を使って、マッチする行を検索する方法です。

textという列を1つ持つDataFrameをサンプルデータとして作成します。

import pandas as pd
import re

df = pd.DataFrame({'text': ['a', 'aaa', 'abc', 'def']})

f:id:ohke:20180818151533p:plain

PandasのSeriesは、文字列の便利な操作をまとめたstrアクセサを提供しています。

https://pandas.pydata.org/pandas-docs/stable/text.html

例えば、多言語の文字列型などでもよくあるcontains()やstartswith()などが使えます。

# "a"を含む
df[df['text'].str.contains('a')]
#   text
# 0    a
# 1  aaa
# 2  abc

# "ab"で始まる
df[df['text'].str.startswith('ab')]
#   text
# 2  abc

正規表現で検索する場合は、match()を使います。例えば、"a.+"にマッチする行を選択する場合は、以下のように行います。

df[df['text'].str.match(r'a.+')]
#   text
# 1  aaa
# 2  abc

# コンパイル済みのパターンを渡すこともできます
pattern = re.compile('a.+')
df[df['text'].str.match(pattern)]
#   text
# 1  aaa
# 2  abc