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

如何在Pandas DataFrame中匹配文本列与关键词并返回匹配词?

解决方案

首先确保你已经将字典转换为pandas DataFrame(你提供的df是字典格式,需要先转成DataFrame才能使用apply方法):

import pandas as pd

keywords = ['yellow', 'orange', 'purple', 'pink']
# 将字典转为DataFrame
df = pd.DataFrame({'colours' : ['my favourite colour is purple but sometimes pink', 'I have a yellow dinosaur', 'all flowers are red']})

1. 新增列存储匹配到的关键词(列表格式)

直接用列表推导式在apply中收集所有匹配的关键词:

# 保留你原来的匹配判断列
df['match_colours'] = df.apply(lambda x: any(word in x.colours for word in keywords), axis=1)
# 新增列存储具体匹配的关键词
df['matched_keywords'] = df['colours'].apply(lambda x: [word for word in keywords if word in x])

运行后,df的结果如下:

colours  match_colours matched_keywords
0  my favourite colour is purple but sometimes pink           True  [purple, pink]
1                     I have a yellow dinosaur           True       [yellow]
2                          all flowers are red          False              []

2. 可选:转为逗号分隔的字符串格式

如果需要将匹配结果以字符串形式展示(而非列表),可以用join方法:

df['matched_keywords_str'] = df['colours'].apply(lambda x: ', '.join([word for word in keywords if word in x]))

此时matched_keywords_str列的值会是:purple, pink、yellow、空字符串。

3. 进阶:避免部分匹配(匹配完整单词)

如果担心出现部分匹配的情况(比如关键词是low,文本里的yellow会被误匹配),可以用正则表达式的单词边界来匹配完整单词:

import re

def get_full_match_words(text, keyword_list):
    # 构建正则模式,匹配完整单词,不区分大小写可选
    regex_pattern = re.compile(r'\b(' + '|'.join(keyword_list) + r')\b', re.IGNORECASE)
    # 返回所有匹配的单词
    return regex_pattern.findall(text)

df['matched_full_words'] = df['colours'].apply(lambda x: get_full_match_words(x, keywords))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 17:15:41