Подтвердить что ты не робот

Проверьте, есть ли строка в столбце pandas dataframe в списке

Если у меня есть такой кадр

frame = pd.DataFrame({'a' : ['the cat is blue', 'the sky is green', 'the dog is black']})

и я хочу проверить, содержит ли какая-либо из этих строк определенное слово, которое я просто должен сделать.

frame['b'] = frame.a.str.contains("dog") | frame.a.str.contains("cat") | frame.a.str.contains("fish")

frame['b'] выходы:

True
False
True

Если я решил сделать список

mylist =['dog', 'cat', 'fish']

Как я могу проверить, что строки содержат определенное слово в списке?

4b9b3361

Ответ 1

frame = pd.DataFrame({'a' : ['the cat is blue', 'the sky is green', 'the dog is black']})

frame
                  a
0   the cat is blue
1  the sky is green
2  the dog is black

Метод str.contains принимает шаблон регулярного выражения:

mylist = ['dog', 'cat', 'fish']
pattern = '|'.join(mylist)

pattern
'dog|cat|fish'

frame.a.str.contains(pattern)
0     True
1    False
2     True
Name: a, dtype: bool

Поскольку шаблоны регулярных выражений поддерживаются, вы также можете вставлять флаги:

frame = pd.DataFrame({'a' : ['Cat Mr. Nibbles is blue', 'the sky is green', 'the dog is black']})

frame
                     a
0  Cat Mr. Nibbles is blue
1         the sky is green
2         the dog is black

pattern = '|'.join([f'(?i){animal}' for animal in mylist])  # python 3.6+

pattern
'(?i)dog|(?i)cat|(?i)fish'

frame.a.str.contains(pattern)
0     True  # Because of the (?i) flag, 'Cat' is also matched to 'cat'
1    False
2     True