如何在Python Pandas DataFrame中统计指定列表单词次数并新增列
最优实现方案
要高效统计每行Speech列中MMA相关单词/短语的出现次数,推荐使用Pandas向量化字符串操作结合正则表达式,避免逐行循环,保证处理效率。
实现步骤
- 构建匹配正则模式:处理单词列表,生成支持不区分大小写且完整匹配的正则表达式,避免部分字符误匹配(比如防止把
mmaaaa统计为mma)。 - 用向量化方法统计匹配次数:通过
str.findall提取所有匹配项,再用str.len()获取对应数量。
完整代码
import pandas as pd import re mma_related_words = ['mma', 'ju jitsu', 'boxing'] data = { "Name": ['Dana White', 'Triple H'], "Speech": ['mma is a fantastic sport. ju jitsu makes you better as a person.', 'Boxing sucks. Professional wrestling is much better.'] } df = pd.DataFrame(data) # 构建正则模式:转义特殊字符,用|连接,添加单词边界确保完整匹配 pattern = r'\b(?:{})\b'.format('|'.join(re.escape(word) for word in mma_related_words)) # 统计匹配次数,忽略大小写差异 df['MMA Related Word Count'] = df['Speech'].str.findall(pattern, flags=re.IGNORECASE).str.len() print(df)
输出结果
| Name | Speech | MMA Related Word Count |
|---|---|---|
| Dana White | mma is a fantastic sport. ju jitsu makes you better as a person. | 2 |
| Triple H | Boxing sucks. Professional wrestling is much better. | 1 |
方案优势
- 高效性:全程使用Pandas向量化操作,比
apply逐行循环效率高数倍,适配大数据集处理。 - 准确性:通过
re.escape处理单词中的特殊字符,\b确保完整匹配,re.IGNORECASE兼容大小写差异。 - 扩展性:新增/修改MMA相关单词时,只需调整
mma_related_words列表,无需修改核心逻辑。
内容的提问来源于stack exchange,提问作者Brian
相关产品推荐
相关产品推荐

