首页 > 解决方案 > 使用 Pandas 仅将 str.contains 与整个单词一起使用

问题描述

考虑:

array = ['... ,  '...'  , '.... ' ,....]
results = df[df['Message'].str.contains('|'.join(array)).fillna(False)]

我们如何强制str.contains只使用数组中的整个单词?

标签: pythonpython-3.xpandasstringdataframe

解决方案


您需要包装所有单词 (w1|w2|w3) 以匹配数组中的任何单词。\b然后在两边添加一个单词边界 ,并带有转义符。

pattern = '\\b(' + '|'.join(arr) + ')\\b'
df[df['Message'].str.contains(pattern).fillna(False)]

现在,由于我添加了 extract group (), contains 将产生警告。

UserWarning: This pattern has match groups. To actually get the groups, use str.extract.

要处理此警告,请更改containsmatch

df[df['Message'].str.match(pattern).fillna(False)]

推荐阅读