You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Python Pandas DataFrame的文本列中匹配提取指定列表关键词

实现方法

已知条件

  • 待匹配的带空格关键词列表:
lst = ["apple pie", "chocolate shakes", "orange juice"]
  • 待处理DataFrame包含Explanation文本列,样例结构:
索引Explanation
aapple pie is my favorite dessert
bI love chocolate. But I love chocolate shakes more.
cshe is allergic to orange juice
  • 目标:新增Explanation Extracted列,存储每条文本中匹配到的列表内关键词,最终效果:
索引ExplanationExplanation Extracted
aapple pie is my favorite dessertapple pie
bI love chocolate. But I love chocolate shakes more.chocolate shakes
cshe is allergic to orange juiceorange juice

代码实现

因为关键词本身包含空格,不能用常规分词后比对的方式,直接用正则做整词匹配是最稳妥的方案,同时兼容关键词存在包含关系的场景:

import re
import pandas as pd

# 1. 预处理关键词:按长度倒序,避免短词优先匹配截断长词;转义特殊正则字符
keywords = sorted(lst, key=lambda x: len(x), reverse=True)
match_pattern = re.compile(
    r"\b(" + "|".join(map(re.escape, keywords)) + r")\b"
)

# 2. 示例数据构造(使用自有现有df可跳过这步)
df = pd.DataFrame(
    {
        "Explanation": [
            "apple pie is my favorite dessert",
            "I love chocolate. But I love chocolate shakes more.",
            "she is allergic to orange juice"
        ]
    },
    index=["a", "b", "c"]
)

# 3. 批量提取匹配结果
df["Explanation Extracted"] = df["Explanation"].apply(
    lambda text: match_pattern.search(text).group() if match_pattern.search(text) else None
)

细节说明

  • 正则里加\b单词边界,是为了避免误匹配单词片段,比如不会把apple pies里的apple pie当成匹配结果
  • 关键词按长度倒序排序,是为了处理关键词存在包含关系的场景——比如如果列表里同时有chocolate和chocolate shakes,会优先匹配更长的完整关键词,不会只匹配到短词
  • 如果单条文本可能命中多个关键词,把search替换为findall即可,提取结果会以列表形式存储所有命中的关键词:
# 多关键词命中场景的写法
df["Explanation Extracted"] = df["Explanation"].apply(
    lambda text: match_pattern.findall(text)
)

运行后打印df即可得到目标结果。

内容的提问来源于stack exchange,提问作者ehkhacha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 05:15:41