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

如何基于DataFrame列的特定字符串内容删除行?

解决DataFrame过滤包含特定子串行的问题

这事儿我之前处理过!你之前的代码用了精确匹配(判断整个字符串完全等于(silver)或(gold)),但你的数据里这些内容只是字符串的一部分,比如my (gold),所以精确匹配肯定没用。得换用子串匹配的方法,用Pandas的str.contains()就能搞定。

方法一:简洁的正则匹配(推荐)

直接用str.contains()同时匹配两个子串,通过~取反来保留不包含目标子串的行:

# 转义括号(因为括号是正则特殊字符)
df = df[~df['var'].str.contains('\(gold\)|\(silver\)')]

如果不想写正则转义,可以加上regex=False参数,这样括号就会被当作普通字符处理:

df = df[~df['var'].str.contains('(gold)|(silver)', regex=False)]

方法二:分步过滤

如果你觉得正则看着麻烦,也可以分两次过滤,用&连接两个条件:

# 先排除含(gold)的行,再排除含(silver)的行
df = df[~df['var'].str.contains('(gold)', regex=False) & ~df['var'].str.contains('(silver)', regex=False)]

处理缺失值的情况

如果你的var列存在NaN值,str.contains()会返回NaN,导致过滤出错。这时候可以加上na=False参数,把NaN的行按需求处理(下面的代码会保留NaN行,如果你想去掉NaN,就把na=False改成na=True):

df = df[~df['var'].str.contains('(gold)|(silver)', regex=False, na=False)]

简单解释下核心逻辑:

  • str.contains()会返回一个布尔Series,标记每行的var是否包含目标子串
  • ~符号是取反操作,把包含子串的行过滤掉,留下不包含的行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:50:17