使用分位数 python 移除异常值

Remove outlier using quantile python

我需要删除回归数据集的离群值。假设数据集包含以下方式

# dataset named df
humidity     windspeed
 0.01          4.9
 4.5           20.0
 3.5           5.0
 50.0          4.0
 4.2           0.05
 3.4           3.9
 18.0          4.7

# code for outlier removal
def quantile(columns):
   for column in columns:
      lower_quantile = df[column].quantile(0.25)
      upper_quantile = df[column].quantile(0.75)
      df[column] = df[(df[column] >= lower_quantile) & df[column] <= upper_quantile)

columns = ['humidity', 'windspeed']
quantile(columns)

仔细检查,列湿度有三个异常值,分别为 50.0、18.0、0.01,但对于风速列,异常值分别为 20 和 0.05,并且两列异常值不在同一行。在这种情况下,如果我用上面的代码删除异常值,我会得到以下错误:

Value error: Columns must be same length as key

据我了解,一旦异常值被移除,每列中行的长度就不一样了,因此 return 是我的错误。有没有其他方法可以解决这个问题?

您可以同时过滤两列,

df[
    df['humidity'].between(df['humidity'].quantile(.25), df['humidity'].quantile(.75)) &\
    df['windspeed'].between(df['windspeed'].quantile(.25), df['windspeed'].quantile(.75))
]

在这种情况下,所有三个 df'humidity' 的条件和 'windspeed' 的条件共享相同的长度,因为它们都来自相同的 df.