Поиск точных целых слов в Pandas Dataframe из списка - PullRequest
0 голосов
/ 30 марта 2020

Я знаю, что этот вопрос задавался миллион раз, но у меня все еще есть проблемы с ним. У меня есть список точных целых слов, которые я хочу найти в pandas фрейме данных.

Counties_List = ['MOMBASA', 'KWALE', 'LAMU']

df2 = df1[df1['County/ Sub-County'].str.contains('|'.join(Counties_List))]

приведенный выше код частично работает, так как приносит другие строки, которые мне не нужны, такие как LAMU-NORTH et c. Поэтому я выполнил регулярный поиск одного элемента в списке, например, только LAMU, и код работал так, как я ожидал. Как мне сопоставить остальные все элементы списка, чтобы они могли появляться в df2. Я бы хотел, чтобы в кадре были все слова, которые я включил в список.

df2[df2['County/ Sub-County'].str.contains('^LAMU$')]

1 Ответ

0 голосов
/ 30 марта 2020

Кажется, вы хотите точное совпадение элементов в Countries_List в столбце Countey/ Sub-County. Вы можете использовать

 df2 = df1[df1['County/ Sub-County'].str.contains(r'^(?:{})$'.format('|'.join(Counties_List)))]
 df2 = df1[df1['County/ Sub-County'].str.contains(rf'^(?:{"|".join(Counties_List)})$')] # Python 3.7+

Добавить (?i) перед ^, чтобы включить сопоставление без учета регистра.

Или, если вам нужно фиксированное сравнение строк, просто используйте isin :

df2 = df1[df1['County/ Sub-County'].isin(Counties_List)]

Регулярное выражение, полученное из списка Counties_List = ['MOMBASA' ,'KWALE' ,'LAMU'], будет выглядеть как ^(?:MOMBASA|KWALE|LAMU)$. Группа без захвата, (?:...), будет следить за тем, чтобы якоря применялись ко всем альтернативам в группе.

См. Демонстрационную версию regex .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...