Winsorize outliers



我有一个包含200000个观测值和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更改为它的任何子集。

最新更新