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

文本列含指定经济术语,筛选后DataFrame为何为空?

问题描述

现有两个DataFrame:

  • df:包含一列文本数据(列名text)
  • econ_terms:包含两列,分别存储正面(plus)和负面(minus)经济术语

目标是移除df中不包含任何正面/负面经济术语的文本行,编写的代码如下:

# Convert the column to a string
df['text'] = df['text'].astype(str)
econ_terms['plus'] = econ_terms['plus'].astype(str)
econ_terms['minus'] = econ_terms['minus'].astype(str)

# Get the unique values from 'plus' and 'minus' columns in the 'econ_terms' DataFrame
econ_values = set(econ_terms['plus']).union(set(econ_terms['minus']))

# Filter the 'df' DataFrame using boolean indexing
df_filtered = df[df['text'].isin(econ_values)]

手动确认:econ_terms的minus列包含“unemployment”,且df的text列确实存在包含该词汇的文本,但筛选后df_filtered是空DataFrame,需排查原因。

问题原因分析
  • 完全匹配逻辑错误:isin()是检查df['text']的整行文本是否完全等于经济术语集合中的某一个值,而非检查文本中是否包含该术语。比如df文本是“Rising unemployment rates”时,和“unemployment”不是完全相等的字符串,会被直接过滤。
  • 大小写/空格差异:术语和文本中的词汇存在大小写不一致(如术语是“Unemployment”,文本是“unemployment”)、前后空格(术语带尾空格,文本不带)等情况时,完全匹配会失败。
  • 特殊字符/空值干扰:转字符串时,原空值会变成'nan'字符串;另外文本或术语中可能存在不可见特殊字符(全角空格、换行符),导致表面一致但实际匹配失败。
修正方案

改用包含检查逻辑替换完全匹配,结合str.contains()和正则实现:

# 转换为字符串类型
df['text'] = df['text'].astype(str)
econ_terms['plus'] = econ_terms['plus'].astype(str)
econ_terms['minus'] = econ_terms['minus'].astype(str)

# 合并所有经济术语,生成正则匹配模式
econ_terms_list = econ_terms['plus'].tolist() + econ_terms['minus'].tolist()
# 清理空字符串和多余空格,避免正则错误
econ_terms_list = [term.strip() for term in econ_terms_list if term.strip()]
pattern = '|'.join(econ_terms_list)

# 筛选包含任意经济术语的行,忽略大小写并排除空值
df_filtered = df[df['text'].str.contains(pattern, case=False, na=False)]

说明:

  • str.contains(pattern)会检查文本中是否包含任意指定术语,不再要求完全相等。
  • case=False开启大小写不敏感匹配,避免因大小写差异漏判。
  • na=False将空值行标记为不匹配,排除空值干扰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 16:13:35