如何在 pandas str.contains 中使用 \b 单词边界?
Posted
技术标签:
【中文标题】如何在 pandas str.contains 中使用 \\b 单词边界?【英文标题】:How to use \b word boundary in pandas str.contains?如何在 pandas str.contains 中使用 \b 单词边界? 【发布时间】:2014-04-17 02:03:34 【问题描述】:使用 str.contains 时是否有等价物?
以下代码因为“Sa”而错误地将“Said Business School”列在类别中。如果我可以创建一个单词边界,它将解决问题。在搞砸之后放一个空格。我正在使用熊猫,它们是 dfs。我知道我可以使用正则表达式,但只是好奇我是否可以使用字符串来使其更快
gprivate_n = ('Co|Inc|Llc|Group|Ltd|Corp|Plc|Sa |Insurance|Ag|As|Media|&|Corporation')
df.loc[df[df.Name.str.contains('0'.format(gprivate_n))].index, "Private"] = 1
【问题讨论】:
对不起,我用的是熊猫! 只要使用正则表达式分词... @poke:需要使用r'\b...'
(原始字符串)。与正则表达式相同的老问题。
【参考方案1】:
这与正则表达式中的旧 Python 问题相同,其中 '\b'
应作为 raw-string r'\b...'
传递。或者不太理想,双重转义 ('\\b'
)。
所以你的正则表达式应该是:
gprivate_n = (r'\b(Co|Inc|Llc|Group|Ltd|Corp|Plc|Sa |Insurance|Ag|As|Media|&|Corporation)')
【讨论】:
【参考方案2】:单词边界不是字符,所以用.contains
找不到。您需要使用正则表达式或将字符串拆分为单词,然后检查您当前在 gprivate_n
中定义的集合中每个单词的成员资格。
【讨论】:
在使用\\b
而不是\b
和/或原始字符串时,可以使用str.contains
捕获单词边界。见link 和link。
@PawelKranzberg:这实际上是关于转义或原始字符串的老问题,所以使用r\b...
这实际上是不正确的:\b
可以与str.contains
一起使用,您只需要原始字符串:r'\b...'
以上是关于如何在 pandas str.contains 中使用 \b 单词边界?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Pandas 中向 .str.contains 添加多个字符串? [复制]
在 Pandas str.contains() 的正则表达式中使用变量
python pandas 中的 Str.contains 也标记为空白
Pandas str.contains - 在字符串中搜索多个值并在新列中打印值[重复]