从数值特征中去除异常值

问题描述

嗨,我正在尝试从具有数字特征的列中删除异常值,但是当我执行我的代码时,整个数据集都被删除了,请任何人告诉我我做错了什么

numerical_columns = data.select_dtypes(include=['int64','float64']).columns.tolist()

print('Number of rows before discarding outlier = %d' % (data.shape[0]))

for i in numerical_columns:

q1 = data[i].quantile(0.25)
q3 = data[i].quantile(0.75)
iqr = q3-q1 #Interquartile range
fence_low  = q1-1.5*iqr
fence_high = q3+1.5*iqr
data = data.loc[(data[i] > fence_low) & (data[i] < fence_high)]

print('Number of rows after discarding outlier = %d' % (data.shape[0]))

解决方法

以下代码对我有用。这里 col 是您需要删除异常值的数据框的数字列

    #Remove Outliers: keep only the ones that are within +3 to -3 
    # standard deviations in the column   
     df = df[np.abs(df[col]-df[col].mean()) <= (3*df[col].std())]

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...