Winsorize выбросы - PullRequest
       6

Winsorize выбросы

0 голосов
/ 06 ноября 2019

У меня есть фрейм 200 000 наблюдений и 23 разных столбца. Я составил данные и обнаружил, что в каждом столбце были выбросы. Поэтому я хочу winsorize полный кадр данных. Сначала мой код работал. Это было медленно, хотя. Однако теперь я получаю только сообщение о том, что объект Series не может быть вызван. Как я могу это исправить?

Я использую следующий код, чтобы украсить дату:

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)

1 Ответ

0 голосов
/ 06 ноября 2019

Насколько я понимаю, вы пытаетесь отфильтровать выбросы для каждого столбца. Таким образом, вы можете перебирать столбцы и фильтровать каждый раз:

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 на любое его подмножество.

...