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

