是否有任何功能相当于 df.isin()
和 df[col].str.contains()
的组合?
例如,假设我有系列 s = pd.Series(['cat','hat','dog','fog','pet'])
,我想找到 s
包含任何 ['og', 'at']
的所有地方,我想得到 —宠物’。
我有一个解决方案,但它相当不优雅:
searchfor = ['og', 'at']
found = [s.str.contains(x) for x in searchfor]
result = pd.DataFrame[found]
result.any()
有一个更好的方法吗?
原文由 ari 发布,翻译遵循 CC BY-SA 4.0 许可协议
一种选择是仅使用正则表达式
|
字符来尝试匹配系列中单词中的每个子字符串s
(仍在使用str.contains
)。您可以通过将
searchfor
中的单词与|
--- 连接起来来构建正则表达式:正如@AndyHayden 在下面的评论中指出的那样,请注意您的子字符串是否具有特殊字符,例如
$
和^
您想要逐字匹配。这些字符在正则表达式的上下文中有特定的含义,会影响匹配。您可以通过使用
re.escape
转义非字母数字字符来使您的子字符串列表更安全:当与
str.contains
一起使用时,这个新列表中的字符串将逐字匹配每个字符。