Найти совпадение в серии, исключая подстроки - PullRequest
3 голосов
/ 03 августа 2020

Это кажется очень простой задачей, но по какой-то причине мне трудно найти ответ. У меня есть длинный список ключевых слов, которые я хочу найти в столбце, и мне нужно только точное совпадение, а не его подстрока.

ключевые слова:

import pandas as pd
match = str(['NE', 'NW'])

столбец:

tmp = pd.Series(['acne', 'abc', 'ne', 'this is ne', 'nw'])

Моя попытка:

tmp.str.contains(match, case=False)

Результаты:

0     True
1    False
2     True
3     True
4     True

'Acne' Я не хочу, чтобы он возвращался как True, потому что 'ne' не существует само по себе. Что я могу сделать, чтобы это произошло?

Ответы [ 3 ]

3 голосов
/ 03 августа 2020

Вы можете использовать границу слова (\ b) в регулярном выражении:

import pandas as pd
match = '|'.join([r'\bNE\b',r'\bNW\b'])
print(match)
tmp = pd.Series(['acne', 'abc', 'ne', 'this is ne', 'nw'])


tmp.str.contains(match, case=False)

Вывод:

0    False
1    False
2     True
3     True
4     True
dtype: bool
2 голосов
/ 03 августа 2020

Чтобы соответствовать всей строке, вы должны использовать ^ -> (начинается с) и $ -> (заканчивается на).
Вы должны использовать | -> (для условия или).

import pandas as pd
match = ['NE', 'NW']

m2 = []
for val in match:
    m2.append('^'+val+'$')

match = '|'.join(m2)

tmp = pd.Series(['acne', 'abc', 'ne', 'this is ne', 'nw'])
res = tmp.str.contains(match, case=False)

print(res)

Спасибо

1 голос
/ 03 августа 2020

Вы хотите использовать match(), который соответствует всему шаблону, вместо contains.

В документации для pandas.core.strings.StringMethods.contains объясняется:

match

аналогично, но строже, полагаясь на re.match вместо re.search

import pandas as pd
match = str(['NE', 'NW'])

tmp = pd.Series(['acne', 'abc', 'ne', 'this is ne', 'nw'])

print(tmp.str.match(match, case=False))

Вывод:

0    False
1    False
2     True
3    False
4     True
dtype: bool
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...