Pandasで特定の文字列(部分一致)を含む行を抽出する

カテゴリーによる抽出などの完全一致は頻出だけど、部分一致は案外使わないのでメモ。

まずはいつものDF。

import pandas as pd
df = pd.DataFrame({'ID': [1, 2, 3, 3, 4, 5, 5],
                   'Name': ['Noto', 'Hisakawa', 'Kouda', 'Hayashibara', 'sakamoto', 'tamura', 'mitsuishi'],
                   'score':[100, 50, 80, 50, 100, 70, 55]})
df

	ID	Name	score
0	1	Noto	100
1	2	Hisakawa	50
2	3	Kouda	80
3	3	Hayashibara	50
4	4	sakamoto	100
5	5	tamura	70
6	5	mitsuishi	55

部分一致を使う場合は、str.containsメソッドを使う。戻ってくるのはSeries。

df['Name'].str.contains('sakamoto')

0    False
1    False
2    False
3    False
4     True
5    False
6    False
Name: Name, dtype: bool

第1引数は正規表現での検索になる。便利。

df['Name'].str.contains('sa.*to')

0    False
1    False
2    False
3    False
4     True
5    False
6    False
Name: Name, dtype: bool

正規表現をOFFにしたい(文字列をそのまま検索したい)場合は、引数regex=Falseを指定すれば良い。

df['Name'].str.contains('sa.*to', regex=False)

0    False
1    False
2    False
3    False
4    False
5    False
6    False
Name: Name, dtype: bool

特定の文字列で始まる、終わるなどのメソッドもあるが(str.startswith、str.endswith)、正規表現でだいたいカバーできそう。

参考文献

このサイトの主
投稿を作成しました 98

関連投稿

検索語を上に入力し、 Enter キーを押して検索します。キャンセルするには ESC を押してください。

トップに戻る