Python中删除数据集异常值行触发ValueError错误该如何解决
错误原因
np.where(pred==-1)的返回结果是一维元组,只有第一个元素是异常值对应的行位置数组,你后续直接将outlier_values(DataFrame对象)传入drop方法,完全不符合参数要求pd.DataFrame.drop()方法接收的是待删除行的索引标签列表,你传入包裹了DataFrame的列表[outlier_values],参数维度不匹配,直接触发了对应报错
修正方案
你可以直接用布尔索引过滤异常值,写法更简洁不易出错:
#identify outliers pred = iforest.fit_predict(x) # 直接保留非异常值的行 x_new = x[pred != -1]
如果一定要用drop方法实现,写法如下:
#identify outliers pred = iforest.fit_predict(x) outlier_pos = np.where(pred==-1)[0] # 提取np.where返回元组的第一个元素,拿到一维位置数组 # 提取异常值对应的索引标签传入drop x_new = x.drop(x.index[outlier_pos])
内容的提问来源于stack exchange,提问作者hideonbush
相关产品推荐
相关产品推荐

