Pandas删除DataFrame特定列含-9的行时提示值不在轴上如何解决
错误原因
pandas的drop()方法入参是要删除的行索引/列名,不是要匹配的字段取值。你之前的所有写法都是要求pandas删除「索引值等于-9」的行,但你的索引列表里根本不存在-9这个值,自然会报not found in axis错误,和MONTO_DE_INGRESO_TOTAL列里有没有-9的取值没有关系。- 你直接对单列Series执行
drop()操作也不会影响原DataFrame,就算执行成功也只会修改单独提取出来的这个Series对象,原DataFrame的行不会被删除。
正确实现方式
方法1:布尔索引过滤(最常用)
直接筛选出MONTO_DE_INGRESO_TOTAL列不等于-9的行,赋值覆盖原变量即可:
# 过滤后生成新的DataFrame,原数据不会被直接修改 ocupados = ocupados[ocupados['MONTO_DE_INGRESO_TOTAL'] != -9] # 可以执行下面的语句验证过滤效果,确认-9是否还存在 print(ocupados['MONTO_DE_INGRESO_TOTAL'].min())
如果担心浮点数精度导致匹配失败,可以用精度范围判断替换等值判断:
ocupados = ocupados[~ocupados['MONTO_DE_INGRESO_TOTAL'].between(-9.0001, -8.9999)]
方法2:用drop方法实现(可读性较低,不推荐)
如果一定要用drop()实现,需要先拿到所有取值为-9的行的索引,再传给drop()方法:
# 先获取符合删除条件的行索引 drop_index = ocupados[ocupados['MONTO_DE_INGRESO_TOTAL'] == -9].index # 按索引删除对应行 ocupados = ocupados.drop(drop_index, axis=0)
内容的提问来源于stack exchange,提问作者VioleC
相关产品推荐
相关产品推荐

