如何在pandas的str.contains中使用\b词边界?

6 投票
2 回答
3568 浏览
提问于 2025-04-17 21:59

使用str.contains的时候有没有类似的东西?

下面的代码错误地把“Said Business School”列入了这个类别,因为它包含了“Sa.” 如果我能创建一个单词边界,就能解决这个问题。加个空格反而会搞乱。 我在使用pandas,也就是数据框(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 

2 个回答

6

这其实是Python在正则表达式中常见的问题,'\b'这个符号应该以原始字符串的形式传入,也就是用 raw-string 写成 r'\b...'。或者不太推荐的方式是使用双重转义,也就是写成 '\\b'

所以你的正则表达式应该是:

gprivate_n = (r'\b(Co|Inc|Llc|Group|Ltd|Corp|Plc|Sa |Insurance|Ag|As|Media|&|Corporation)')
0

词边界并不是一个具体的字符,所以你不能用 .contains 来查找它。你需要使用正则表达式,或者把字符串拆分成单词,然后检查这些单词是否在你当前定义的 gprivate_n 集合里。

撰写回答