Winsorize异常值

Winsorize outliers

我有一个包含 200,000 个观察值和 23 个不同列的数据框。我绘制了数据并发现每一列中都有异常值。因此,我想对完整的数据框进行 winsorize。起初,我的代码确实有效。虽然很慢。但是,现在我只收到 'Series' 对象不可调用的消息。我怎样才能解决这个问题?

我使用以下代码对日期框进行winsorize:

lower = 0.01 upper = 0.99 quantile_df = df.quantile([lower,upper]) quant_df

定义四分位数后,我从数据框中过滤掉异常值:

df =df.apply(lambda x: x(x > quant_df.loc[lower,x.name]) & 
                                (x < quant_df.loc[upper,x.name]), axis=0)

据我了解,您正在尝试过滤掉每一列的异常值。 所以你可以遍历列,每次过滤:

for target_col in df.columns:
    # get upper/lower bound
    df['lower'], df['upper']= df[target_col].quantile([lower, upper])
    # filter
    df = df[(df[target_col] > df['lower']) & (df[target_col] < df['upper'])]

您可能需要将 df.columns 更改为它的任何子集。