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