如何在pandas中统计字符串列中独立单词you/your的出现频次,排除部分匹配?
问题原因
- 现有正则手动穷举大小写、前后空格/标点的方式逻辑冗余,漏了行首、行尾的单词匹配场景,也没法覆盖所有可能的单词分隔情况,同时还存在误匹配包含目标子串单词的问题
- 没有使用正则内置的单词边界规则和不区分大小写参数,导致统计结果不符合预期
修正方案
用正则的单词边界符\b匹配独立单词,同时开启不区分大小写的匹配参数,修正后的代码如下:
import pandas as pd import re df1 = pd.DataFrame(['you youe', 'you You YOU', 'eyou Young'], columns=['words']) # \b 匹配单词边界,re.IGNORECASE 表示不区分大小写 df1['counts'] = df1['words'].str.count(r'\b(you|your)\b', flags=re.IGNORECASE) print(df1)
运行结果
words counts 0 you youe 1 1 you You YOU 3 2 eyou Young 0
逻辑说明
\b是正则内置的单词边界标识符,只会匹配单词和非单词字符的交界位置,天然避免了eyou、youe这类部分匹配的场景flags=re.IGNORECASE开启不区分大小写匹配,不需要手动穷举所有大小写组合的目标单词,大幅简化正则逻辑- 括号内的
you|your同时匹配两个目标单词,逻辑清晰不易出错
内容的提问来源于stack exchange,提问作者deLaJU
相关产品推荐
相关产品推荐

