【问题标题】: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...'(原始字符串)。与正则表达式相同的老问题。

标签: python regex string pandas word-boundary


【解决方案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 捕获单词边界。见linklink
    • @PawelKranzberg:这实际上是关于转义或原始字符串的老问题,所以使用r\b...
    • 这实际上是不正确的:\b 可以与str.contains 一起使用,您只需要原始字符串:r'\b...'
    猜你喜欢
    • 2017-02-02
    • 2016-09-25
    • 1970-01-01
    • 2021-09-23
    • 1970-01-01
    • 2021-06-18
    • 1970-01-01
    • 1970-01-01
    • 2021-08-20
    相关资源
    最近更新 更多