Python中高效统计文本列与人名列表的单词匹配数量(Pandas教程)

本文详解如何使用Pandas对两列文本进行逐词精确匹配并计数,解决因正则转义错误(如o)导致的报错问题,提供简洁、健壮且无需正则的纯字符串处理方案。

本文详解如何使用pandas对两列文本进行逐词精确匹配并计数,解决因正则转义错误(如`o`)导致的报错问题,提供简洁、健壮且无需正则的纯字符串处理方案。

在实际数据处理中,常需判断一段自然语言文本(如句子)中有多少个词“精确出现在”另一列的逗号分隔名单中——例如从描述性语句中统计提及了哪些指定人员。原始尝试使用 re.search(f'\b{p}\b', o) 不仅引入了不必要的正则开销,还因误写 o(应为 s 或直接避免)触发 error: bad escape o 错误。更优解是绕过正则,采用基于空格分词 + 集合/列表成员检查的轻量逻辑。

核心思路如下:

  • 将 people 列按 ', ' 安全拆分为姓名列表(注意处理 NaN);
  • 将 original 列按空白字符(空格、制表符等)默认 split() 拆分为单词列表;
  • 对每个句子中的每个单词,检查其是否完整等于 people 列中任一姓名(区分大小写、无子串误匹配);
  • 统计满足条件的单词总数,赋值给 result 列。

以下是完整可运行代码:

import pandas as pd

# 构建示例数据
df = pd.DataFrame({
    "original": [
        "John is a good friend",
        "Mary and Peter are going to marry",
        "Bond just met the Bond girl",
        "Chris is having dinner",
        "All Marys are here"
    ],
    "people": ["John, Mary", "Peter, Mary", "Bond", None, "Mary"]
})

# 关键步骤:填充 NaN 并执行逐行匹配计数
df["people"] = df["people"].fillna("")  # 防止 str.split() 报错
df["result"] = [
    sum(word in person_list for word in sentence.split())
    for sentence, person_list in zip(
        df["original"],
        df["people"].str.split(", ")
    )
]

print(df)

输出结果:

ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

下载

                            original       people  result
0              John is a good friend   John, Mary       1
1  Mary and Peter are going to marry  Peter, Mary       2
2        Bond just met the Bond girl         Bond       2
3             Chris is having dinner                    0
4                 All Marys are here         Mary       0

关键说明与注意事项

  • sentence.split() 默认按任意空白符分割,并自动忽略首尾及连续空格,比手动正则更鲁棒;
  • person_list 是 str.split(", ") 返回的列表(如 ["John", "Mary"]),word in person_list 是 O(n) 线性查找——对中小规模数据完全足够;若性能敏感且 people 列词汇固定,可预转换为 set 提升至 O(1);
  • 本方法严格匹配完整单词:"Mary" 匹配 "Mary",但不匹配 "Marys"(因 "Marys".split() 得 "Marys",而非 "Mary"),符合题设中 "All Marys are here" → 0 的预期;
  • 若需忽略大小写,可统一转小写:word.lower() in [p.lower() for p in person_list];
  • 切勿使用 str.contains() 或模糊正则(如 .*Mary.*),否则会导致 "Marys" 被误计为匹配。

该方案简洁、可读性强、无外部依赖,是处理此类“词级跨列匹配计数”任务的推荐实践。

相关推荐:

《红色沙漠》游戏高效捕鱼方法介绍

《红色沙漠》中的抓鱼钓鱼也是游戏里比较重要的一种收入来源,而想要快速捕鱼就需要一些技巧,其中速度最快的捕鱼方法就是用鱼笼,捕鱼点位的位置就在佩伦城下方区域的格雷洛克渡口码头。 红色沙漠怎么快速捕鱼 本文内容来源于互联网,如有侵权请联系删除。

《我玩梗贼牛》同桌的你正确匹配所有情侣通关攻略

《我玩梗贼牛》同桌的你怎么过?这一关需要正确匹配所有情侣,下面给大家带来了《我玩梗贼牛》同桌的你正确匹配所有情侣通关攻略图文一览,大家需要的可来查看! 《我玩梗贼牛》同桌的你正确匹配所有情侣通关攻略 同桌的你 目标:正确匹配所有情侣 1、从他们的穿着打扮去匹配 2、下图所示情侣移动后,需要把地上的口红给女生 3、中间的情侣移动后,需要把后面地上的情书拖动给男生 4、答案如下图所示: 以上就是《我玩...

Devin AI隐藏技巧:内置工具与快捷键高效使用【技巧】

Devin AI隐藏快捷键可大幅提升效率:Ctrl+Shift+D/Cmd+Shift+D直启主工作区;Ctrl+`秒切编辑器与Shell;/shell、/debug、/stop精准控制AI行为;Ctrl+Shift+H收起工具栏,/browse唤起浏览器。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜ 想在Devin AI中快速调用内置工...

内存暴降50倍且精度无损,MIT提出注意力匹配,能终结大模型显存危机吗?

想象这样一个场景:你正盯着屏幕,看着你的自主 ai 智能体(比如 openclaw)疯狂地运作。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜ 它正在自主审查一个包含数十万行代码的史诗级开源项目,穿梭于无数的文件、API 文档和调试日志之间。它表现得像一个不知疲倦的超级程序员,但在这「无所不能」的表象之下,潜伏着一个随时可能引爆的硬件梦魇 ...

Gemini3.5高效办公完整流程实战从文档到表格到PPT

做日常办公时,我习惯在kula ai聚合平台(leadhi.cn)上并行调用多个模型,横向对比输出质量,快速判断哪个模型在哪个环节更顺手、更高效。最近两周恰逢google发布gemini 3.5 flash,我趁机把它在文档撰写、表格分析、ppt制作等核心办公场景中完整跑了一遍。本文就结合真实使用体验,聊聊它带来的效率跃迁,以及那些真正经得起反复验证的实操技巧。 ☞☞☞AI 智能聊天, 问答助手,...
· AI · 200917

UC浏览器如何设置双击关闭标签页_UC浏览器高效操作技巧

UC浏览器双击关闭非当前标签页需通过五种方法实现:一、标准标签页设置启用双击关闭;二、实验室功能开启高级双击选项;三、快捷键替代(Ctrl/Cmd+W等);四、Android端用Auto.js等工具模拟双击;五、关闭后台自动清理机制防误关。 如果您希望在UC浏览器中通过双击操作快速关闭非当前标签页,但无法在设置中直接找到对应选项,则可能是由于版本差异、平台限制(Android/iOS/Window...

百度搜索怎么把结果限制在标题里_百度搜索标题匹配指令【详解】

intitle:指令可精准筛选标题含关键词的网页,仅匹配标签内容;语法为intitle:关键词(无空格),多词用空格分隔,整体匹配加英文双引号;可搭配site:、filetype:等进一步限定。 想让百度搜索结果只显示标题里含关键词的网页,用 intitle: 指令就能做到。它不看正文、不看URL、也不看图片文字,只盯住网页的 标签内容,精准度高,特别适合找官方通知、招生简章、白皮书这类标题规范的...

视频剪辑移动固态硬盘推荐:三星 T9 高效解决素材难题

视频剪辑新装备:三星 T9 移动固态硬盘 当前视频制作行业,素材整理与调用已成为内容创作者面临的一大挑战。一场中等规模的4K/8K拍摄,所产生的原始素材往往轻松突破数百GB,甚至逼近TB级。若依赖传统存储设备进行传输,速度瓶颈明显;而云方案虽具灵活性,却受限于网络带宽与上传下载周期,难以支撑即时剪辑、现场粗剪等高频操作需求。此时,三星 T9 移动固态硬盘应运而生,以高性能表现直击行业痛点。 为何视...