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

在Pandas中从DataFrame检索含另一DataFrame词汇的行遇问题

解决DataFrame中检索包含指定词汇行的问题

嘿,我懂你遇到的困扰了——你用isin()方法只能拿到和情感词汇完全精确匹配的行,但如果你的需求是找出token列包含任意情感词汇的行,isin()就不太适用啦,因为它只做全等匹配。下面给你两种场景的解决方案:

场景1:需要子串匹配(token包含情感词汇即可)

如果tokens['token']里的内容是长文本,你想找出其中包含任意sentiment_words里词汇的行,可以用正则表达式结合str.contains()来实现:

import numpy as np
import pandas as pd

# 读取数据
sentiment_words = pd.read_csv('sentiment_words.csv')
tokens = pd.read_csv('tokens.csv')

# 第一步:构建正则匹配规则,把所有情感词汇用|连接,实现“任意匹配其一”
# 先过滤空值、转成字符串,避免正则构建出错
clean_sentiment_words = sentiment_words['sentiment_words'].dropna().astype(str)
match_pattern = '|'.join(clean_sentiment_words)

# 第二步:筛选包含任意情感词汇的行
# case=False 关闭大小写区分(如果需要严格区分可以删掉这个参数)
# na=False 把空值视为不匹配,避免报错
filtered_tokens = tokens[tokens['token'].str.contains(match_pattern, case=False, na=False)]

print(filtered_tokens)

场景2:需要精确匹配,但结果少(可能是数据格式问题)

如果你的需求本来就是精确匹配,但返回结果太少,大概率是数据里有隐藏的空格、大小写不一致的问题。可以先清洗两列数据再匹配:

import numpy as np
import pandas as pd

sentiment_words = pd.read_csv('sentiment_words.csv')
tokens = pd.read_csv('tokens.csv')

# 清洗数据:去除前后空格、统一转为小写
sentiment_words['sentiment_words'] = sentiment_words['sentiment_words'].str.strip().str.lower()
tokens['token'] = tokens['token'].str.strip().str.lower()

# 再执行精确匹配
filtered_tokens = tokens[tokens['token'].isin(sentiment_words['sentiment_words'])]

print(filtered_tokens)

可以根据你的实际需求选对应的方案,试试应该就能拿到你想要的结果啦~

内容的提问来源于stack exchange,提问作者Lacri Mosa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:08:49