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

Python:检查DataFrame子串匹配并提取存在的单词列表问题

问题分析与解决方案

原代码错误原因

  • 第一段代码:i in sentence['sentence'].values是检查单词是否完全等于某个句子,而非作为子串存在,只有当单词和句子完全一致时才会被选中,不符合需求。
  • 第二段代码:sentence['sentence'].str.contains(i)返回布尔Series,直接用if判断会触发ValueError(Pandas不允许在布尔上下文直接使用Series),且无法正确判断是否存在至少一个包含该单词的句子。

正确实现方案

方案1:修复循环逻辑

遍历单词表,用any()判断是否存在至少一个句子包含当前单词:

tru = []
for word_val in word['word']:
    # 检查任意句子是否包含该单词
    if sentence['sentence'].str.contains(word_val).any():
        tru.append(word_val)

方案2:向量化操作(高效无循环)

利用Pandas的apply和布尔索引直接筛选符合条件的单词:

existing_words = word[word['word'].apply(lambda x: sentence['sentence'].str.contains(x).any())]['word'].tolist()

方案3:精确匹配完整单词(避免部分匹配)

如果需要匹配完整单词(比如避免app匹配apples),可以使用正则单词边界\b:

tru = []
for word_val in word['word']:
    # 正则匹配完整单词,区分大小写
    if sentence['sentence'].str.contains(r'\b' + word_val + r'\b', regex=True).any():
        tru.append(word_val)

可选参数说明

  • 若需忽略大小写,在str.contains中添加case=False:
    sentence['sentence'].str.contains(word_val, case=False).any()
    

内容的提问来源于stack exchange,提问作者Михаил Беляков

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 04:25:20