如何在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
相关产品推荐
相关产品推荐

