Pandas按列包含指定子串删除行失效问题求助
解决Pandas无法删除包含指定子串行的问题
先说说你现有方法的问题
- 第一种用
isin()的方法完全不适用:isin()是判断整个字符串是否在列表里,而不是判断是否包含子串。如果你的Title不是精确等于'NQR',这个方法根本不会匹配到目标行,自然删不掉。 - 后面两种
str.contains()的方法没生效,大概率是这几个原因:- 大小写不匹配:比如实际数据里是'nqr'、'NQr'这类混合大小写的情况,默认
case=True会严格区分大小写,所以匹配不到。 - 字符串有空白/不可见字符:比如Title里是' NQR'、'NQR '或者带全角空格,直接匹配'NQR'会失败。
- 忘记把过滤结果重新赋值给原DataFrame:如果只是运行过滤代码却没保存结果,原df根本不会改变。
- 大小写不匹配:比如实际数据里是'nqr'、'NQr'这类混合大小写的情况,默认
针对性解决方案
1. 先排查数据问题
先打印Title列的唯一值,确认是否有大小写、空格等问题:
print(df['Title'].unique())
2. 忽略大小写匹配
如果是大小写问题,直接在str.contains()里加case=False参数:
# 过滤后重新赋值给df,确保修改生效 df = df[~df['Title'].str.contains('NQR', case=False, na=False)]
3. 先清理字符串再匹配
如果是空白字符问题,先清理Title列的前后空白,再过滤:
# 去除前后空白字符(包括全角空格) df['Title'] = df['Title'].str.strip() # 执行过滤并赋值 df = df[~df['Title'].str.contains('NQR', na=False)]
4. 用drop方法直接删除(另一种写法)
如果你习惯用drop方法,也可以这样写:
# 找到包含'NQR'的行索引,直接删除 df.drop(df[df['Title'].str.contains('NQR', case=False, na=False)].index, inplace=True)
注意:
inplace=True会直接修改原DataFrame,不需要重新赋值。
内容的提问来源于stack exchange,提问作者DjInsomnia
相关产品推荐
相关产品推荐

