如何检索pandas DataFrame指定列并按关键词生成匹配与不匹配句子列表
实现Pandas关键词匹配拆分句子列表方案
前置说明
假设你存储句子的DataFrame变量名为df,句子所在列的列名为sentence,可根据你的实际命名修改代码中对应字段。
推荐实现方案(效率更高,无需手动逐行遍历)
直接调用pandas原生字符串匹配方法完成筛选,数据量较大时性能远高于手动遍历:
import pandas as pd # 检索词列表 search_words = ['cat', 'dog', 'pet'] # 用字典存储所有结果,结构清晰易调用 result = {} for word in search_words: # 匹配包含当前词的句子,case=False代表不区分大小写,需要严格匹配可删除该参数 include_list = df[df['sentence'].str.contains(word, case=False)]['sentence'].tolist() # 匹配不包含当前词的句子 exclude_list = df[~df['sentence'].str.contains(word, case=False)]['sentence'].tolist() # 存入结果字典 result[f'包含{word}的句子列表'] = include_list result[f'不包含{word}的句子列表'] = exclude_list
调用方法
需要获取对应列表时直接取字典值即可,例如获取包含cat的句子列表:result['包含cat的句子列表']。
如果需要生成独立的变量而非用字典存储,可在循环结束后添加代码globals().update(result),之后就能直接用包含cat的句子列表这类变量名访问对应列表。
逐行遍历实现方案(适用于必须手动遍历的场景)
search_words = ['cat', 'dog', 'pet'] # 初始化结果容器 result = {} for word in search_words: result[f'包含{word}的句子列表'] = [] result[f'不包含{word}的句子列表'] = [] # 遍历每一行句子 for sentence in df['sentence']: for word in search_words: # 大小写不敏感判断可替换为 if word.lower() in sentence.lower() if word in sentence: result[f'包含{word}的句子列表'].append(sentence) else: result[f'不包含{word}的句子列表'].append(sentence)
内容的提问来源于stack exchange,提问作者chip
相关产品推荐
相关产品推荐

