是否有任何函数可以等效于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()
有更好的方法吗
以下是一行lambda,它也可以工作:
输入:
应用Lambda:
输出:
您可以单独使用
str.contains
和使用OR (|)
的正则表达式模式:或者您可以将该系列添加到
dataframe
,然后使用str.contains
:输出:
一种选择是只使用regex
|
字符来尝试匹配序列s
(仍然使用str.contains
)中单词中的每个子字符串您可以通过将
searchfor
中的单词与|
连接来构造正则表达式:正如@AndyHayden在下面的评论中所指出的,如果子字符串有一些特殊字符,例如
$
和^
,请注意,这些字符需要逐字匹配。这些字符在正则表达式的上下文中具有特定的含义,并将影响匹配通过使用
re.escape
转义非字母数字字符,可以使子字符串列表更安全:当与
str.contains
一起使用时,此新列表中的字符串将与每个字符进行字面匹配相关问题 更多 >
编程相关推荐