如何在 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 - 在字符串中搜索多个值并在新列中打印值[重复]

Python pandas,使用 .str.contains 搜索数据框列的子字符串时出错

pandas str.contains 匹配多个字符串并获取匹配的值