python: квантильный код не меняет максимальное и минимальное значения - PullRequest
0 голосов
/ 29 января 2020

Следующий код не вносит никаких изменений при удалении выбросов. Что может быть не так с кодом?

import pandas as pd
import numpy as np
import random


df = pd.DataFrame({'price': np.random.randint(0, 100000000, 50000),
                   'col_2':np.random.randint(0, 100000000, 50000)})

print('Max: ', df['price'].max())
print('Min: ', df['price'].min())
Q1 = df['price'].quantile(0.25)
Q3 = df['price'].quantile(0.75)
IQR = Q3 - Q1


df = df[~((df['price'] < (Q1 - 1.5 * IQR)) | (df['price'] > (Q3 + 1.5 * IQR)))]
print(df.shape)
print('Max: ', df['price'].max())
print('Min: ', df['price'].min())

1 Ответ

0 голосов
/ 29 января 2020

Это потому, что ваши данные не имеют каких-либо выбросов - согласно вашему определению.
Если вы сгенерируете их, как в примере ниже, они будут удалены вашим кодом, как вы ожидаете.

df = (pd.DataFrame({'price': np.random.randint(0, 100000000, 50000), 
                    'col_2':np.random.randint(0, 100000000, 50000)}) 
      .append(pd.DataFrame({'price': np.random.randint(100000000, 200000000, 50),  
                            'col_2':np.random.randint(0, 100000000, 50)})) 
      .reset_index(drop=True) 
     )
...