如何删除pandas dataframe中值为“Bad Input”的object列对应行
实现方法
你之前用df.drop没生效,大概率是没有正确传入要删除行的索引,或是没有把操作结果赋值给原变量(pandas默认返回新对象,不会直接修改原DataFrame),你可以用以下两种方式实现需求:
方法1:布尔索引筛选(官方更推荐)
直接保留列值不等于Bad Input的行,性能更高,写法更简洁。
- 单列校验(只检查指定列是否为
Bad Input):
把你的列名替换为实际要校验的列名即可:df = df[df['你的列名'] != 'Bad Input'] - 多列校验(任意一列出现
Bad Input就删除整行):
把[列1, 列2, 列3]替换为你要校验的所有列名列表:
其中df = df[~(df[['列1', '列2', '列3']] == 'Bad Input').any(axis=1)]~是取反操作,any(axis=1)代表只要任意一列满足判断条件就返回True。
方法2:使用drop方法删除
如果一定要用drop实现,需要先定位到符合删除条件的行的索引,再传入drop方法:
# 先获取要删除的行的索引 drop_idx = df[df['你的列名'] == 'Bad Input'].index # 执行删除,赋值给原变量生效 df = df.drop(drop_idx)
注意事项
- 如果你不想赋值给新变量,可以加
inplace=True参数(例:df.drop(drop_idx, inplace=True)),但pandas官方不推荐该写法,该参数未来版本可能会被废弃。 - 因为列类型是object,注意排查
Bad Input值前后是否有不可见空格,匹配失败的话可以先去除空格再判断:df = df[df['你的列名'].str.strip() != 'Bad Input']
内容的提问来源于stack exchange,提问作者Dv4885
相关产品推荐
相关产品推荐

