Один из вариантов - просто использовать |
символ регулярного выражения, чтобы попытаться сопоставить каждую из подстрок в словах в вашей серии s
(все еще использующиеся str.contains
).
Вы можете создать регулярное выражение, объединив слова searchfor
с помощью |
:
>>> searchfor = ['og', 'at']
>>> s[s.str.contains('|'.join(searchfor))]
0 cat
1 hat
2 dog
3 fog
dtype: object
Как отметил @AndyHayden в комментариях ниже, будьте осторожны, если в ваших подстроках есть специальные символы, такие как $
и, ^
которые вы хотите сопоставить буквально. Эти символы имеют определенные значения в контексте регулярных выражений и влияют на сопоставление.
Вы можете сделать свой список подстрок более безопасным, избегая не буквенно-цифровых символов с помощью re.escape
:
>>> import re
>>> matches = ['$money', 'x^y']
>>> safe_matches = [re.escape(m) for m in matches]
>>> safe_matches
['\\$money', 'x\\^y']
Строки с в этом новом списке будут соответствовать каждому символу буквально при использовании с str.contains
.
pd.Series.str.contains
. Если производительность является проблемой, возможно, стоит изучить это.