Как я могу очистить свой набор данных от выбросов, поскольку он включает числовые и категориальные переменные в Python? - PullRequest
0 голосов
/ 25 ноября 2018

Я хотел бы очистить свой набор данных от выбросов, но только в трех конкретных столбцах, так как остальные 10 содержат категориальные переменные.Так как же очистить мои данные, ссылаясь только на эти конкретные столбцы?

Я бы хотел использовать метод диапазона iqr.Это код, который я запускаю до сих пор:

import numpy as np
def outliers(x): 
       return np.abs(x- x.median()) > 1.5*(x.quantile(.75)-x.quantile(0.25))
ath2.Age[outliers(ath2.Age)]
ath2.Height[outliers(ath2.Height)]
ath2.Weight[outliers(ath2.Weight)]

После проверки количества выбросов в интересующих меня столбцах я не знаю, как действовать дальше.

1 Ответ

0 голосов
/ 25 ноября 2018

Если вы хотите, чтобы код был динамическим, вы можете сначала проверить столбцы, которые не являются категориальными, с помощью приведенного ниже кода:

cols = df.columns
num_cols = df._get_numeric_data().columns 
##num_cols will contains list of column names which are numeric
## In your case, it should come Age,Height etc.

В качестве альтернативы, вы также можете использовать параметры include или exclude, используяdf.select_dtypes в соответствии с вашим фреймом данных

После этого запустите приведенный ниже код из столбцов сверху:

df[np.abs(df.Data-df.Data.mean()) <= (3*df.Data.std())]  
## Df is the dataframe and Data is the name of the column. 
#In your case, it will be Age,Height etc.

ИЛИ

Если вы хотите сделатьновый df только с числовыми столбцами и узнайте выбросы за один выстрел, ниже код:

df[df.apply(lambda x: np.abs(x - x.mean()) / x.std() < 3).all(axis=1)]
...