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

如何在Pandas中基于列内部分字符串过滤数据行?

高效过滤DataFrame中包含指定关键词的行

你的问题出在匹配逻辑上:

  • 第一种方法是判断displayed_link的完整字符串是否在排除列表里,但实际displayed_link是完整URL,自然全返回F
  • 第二种方法语法错误,因为不能直接判断列表是否在字符串里,要逐个检查列表元素是否在字符串中

针对你的需求,最高效的方法是利用pandas的向量化字符串操作(比逐行循环快得多),结合正则表达式批量匹配:

步骤1:构造正则匹配模式

先把排除列表转成正则能用的模式,用|分隔每个关键词,同时转义特殊字符避免正则语法干扰:

import re
import pandas as pd

# 你的排除列表
promotions = ["coursera", "rasmussen", "snhu", "mastersindatascience", "northeastern", 
              "mygreatlearning", "payscale.com", "careerfoundry", "microsoft.com", 
              "codecademy", "edx.org", "ahima.org", "›certification-exams›chda'"]

# 构造正则模式,转义每个关键词
pattern = '|'.join(re.escape(kw) for kw in promotions)

步骤2:过滤数据

用str.contains匹配关键词,再取反得到有效数据(保留不包含任何排除关键词的行):

# 筛选出不含排除关键词的行,case=False表示不区分大小写
filtered_df = df[~df['displayed_link'].str.contains(pattern, case=False, na=False)]
  • ~表示取反,保留不符合匹配条件的行
  • case=False避免因为大小写差异漏匹配(比如Coursera和coursera)
  • na=False处理列中的空值,避免报错

备选方法(效率较低,适合小数据量)

如果不想用正则,可以用apply结合any()逐个检查,但数据量大时性能不如向量化操作:

def has_excluded_keyword(link):
    return any(kw in link for kw in promotions)

filtered_df = df[~df['displayed_link'].apply(has_excluded_keyword)]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 08:05:15