是否有任何函数相当于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()
解决方法:
一种选择就是使用正则表达式尝试匹配系列中单词中每个子字符串的字符(仍然使用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一起使用时,此新列表中的字符串将逐字匹配每个字符.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。