从数据集中删除异常值时遇错误,请求技术协助
删除异常值索引报错的解决方法
问题根源
你用df.drop(outlier_indices, inplace=True)删除异常值时触发KeyError: '[10 18 28] not found in axis',核心原因是:你传入的outlier_indices里的数值不是当前DataFrame的行索引值——大概率你拿到的是数据的「位置下标」(比如用numpy计算出的行位置),但DataFrame的行索引可能不是从0开始的连续整数,或者之前的操作已经修改过索引。
快速解决方法
方法1:把位置下标转成真实索引值删除
如果outlier_indices是位置下标(比如np.where()返回的结果),用下面的代码替换原删除语句:
df.drop(df.index[outlier_indices], inplace=True)
df.index[outlier_indices]会把位置下标转换成DataFrame对应的真实索引值,这样就能精准定位到要删除的行。
方法2:先重置索引再删除
如果你的DataFrame索引混乱,先重置成连续整数索引,再执行删除操作:
# 重置索引,drop=True避免保留原索引列 df = df.reset_index(drop=True) # 现在可以直接用outlier_indices删除 df.drop(outlier_indices, inplace=True)
方法3:用位置直接定位删除
也可以通过iloc定位到目标行,再取其索引执行删除:
df = df.drop(df.iloc[outlier_indices].index)
验证操作
删除后打印数据行数,确认异常值行已被移除:
print(df.shape)
内容的提问来源于stack exchange,提问作者Aparna Shahare
相关产品推荐
相关产品推荐

