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

Pandas如何筛选DataFrame中仅含指定列表独立单词的行

实现方案

核心用正则的单词边界符\b匹配独立词汇,即可避免子串命中的问题,同时支持忽略大小写匹配,不需要分开拼接大小写匹配结果,代码更简洁高效。

核心筛选逻辑

import re
import pandas as pd

names = ['ATH', 'CRSR', 'GME', 'AMC', 'TSLA', 'MVIS', 'SPCE', 'CLNE', 'AAPL', 'WKHS']
# 构造独立单词匹配正则,re.escape避免目标词含特殊正则字符导致匹配异常
match_pattern = '|'.join([rf'\b{re.escape(ticker)}\b' for ticker in names])
# 筛选文本包含任意独立目标词的行,case=False表示忽略大小写
df_filtered = df[df['text'].str.contains(match_pattern, case=False, regex=True)].copy()

匹配规则说明

\b是正则单词边界符,仅当目标词前后为非单词字符(空格、标点、换行、字符串首尾等)时才会命中,完美符合你的需求:

  • 示例中bloodbath里的ath前后都是字母,不属于单词边界,不会被命中,第29行直接被过滤
  • 其余行的ATH、ath、aapl都是独立单词,会被正常命中保留

完整修改后代码

import re
import pandas as pd

# 目标词汇列表
names = ['ATH', 'CRSR', 'GME', 'AMC', 'TSLA', 'MVIS', 'SPCE', 'CLNE', 'AAPL', 'WKHS']
# 构造匹配规则
match_pattern = '|'.join([rf'\b{re.escape(ticker)}\b' for ticker in names])

# 筛选符合要求的行,同时处理dt字段
df_ticker = df[df['text'].str.contains(match_pattern, case=False, regex=True)].copy()
df_ticker['dt'] = pd.to_datetime(df_ticker['dt'])

# 原有去重逻辑保留,无需修改
def dedup(sentence, to_dedup):
    for word in to_dedup:
        while sentence.split().count(word) > 3:
            sentence = ''.join(sentence.rsplit(word, 1)).replace('  ', ' ')
    return sentence

df_ticker['text'] = df_ticker.apply(lambda row: dedup(row['text'], names), axis=1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 02:21:02