如何在Pandas中匹配DataFrame文本列指定词汇并生成匹配列?
解决方案
核心思路
要实现精确匹配完整单词并提取对应词汇,需要用正则表达式结合str.extract方法——它能从文本中抓取符合规则的内容,而不是只判断是否存在。
具体实现代码
import pandas as pd # 初始化你的两个DataFrame df_dictionary = pd.DataFrame({'good': ['love', 'like'], 'bad': ['dislike', 'hate']}) df_text = pd.DataFrame({'col1': ['i love cats', 'i hate dogs']}) # 生成匹配完整单词的正则表达式(\b确保匹配独立单词,避免部分匹配) good_words = df_dictionary['good'].dropna().tolist() good_regex = fr"\b({'|'.join(good_words)})\b" bad_words = df_dictionary['bad'].dropna().tolist() bad_regex = fr"\b({'|'.join(bad_words)})\b" # 提取匹配的词汇到新列,空匹配用空字符串填充 df_text['string_match_good'] = df_text['col1'].str.extract(good_regex, expand=False).fillna('') df_text['string_match_bad'] = df_text['col1'].str.extract(bad_regex, expand=False).fillna('')
最终效果
运行后df_text的结构完全符合需求:
| col1 | string_match_good | string_match_bad |
|---|---|---|
| i love cats | love | |
| i hate dogs | hate |
关键细节说明
\b是正则的单词边界,确保只匹配独立的完整单词,比如不会把loved误识别为lovedropna()处理字典中可能存在的空值,避免正则表达式出错- 如果一行有多个同类型匹配词汇,可改用
str.findall再拼接,比如df_text['col1'].str.findall(good_regex).str.join(', ')
内容的提问来源于stack exchange,提问作者datascientistxxx
相关产品推荐
相关产品推荐

