gpt4 book ai didi

python - 如何在 Pandas 中测试字符串是否包含列表中的子字符串之一?

转载 作者:IT老高 更新时间:2023-10-28 21:33:47 26 4
gpt4 key购买 nike

是否有任何函数相当于 df.isin()df[col].str.contains() 的组合?

例如,假设我有这个系列s = pd.Series(['cat','hat','dog','fog','pet']),我想找到所有s的地方code> 包含 ['og', 'at'] 中的任何一个,我想要得到除 'pet' 之外的所有内容。

我有一个解决方案,但它相当不雅:

searchfor = ['og', 'at']
found = [s.str.contains(x) for x in searchfor]
result = pd.DataFrame[found]
result.any()

有没有更好的方法来做到这一点?

最佳答案

一个选项是使用正则表达式 | 字符来尝试匹配系列 s 中单词中的每个子字符串(仍然使用 str.包含)。

您可以通过将 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 一起使用时,此新列表中的字符串将逐字匹配每个字符。

关于python - 如何在 Pandas 中测试字符串是否包含列表中的子字符串之一?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26577516/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com