#python #pandas #data-cleaning #outliers
Вопрос:
for col in ('DiabetesPedigreeFunction','Insulin'):
Q1=df[col].quantile(0.25)
Q3=df[col].quantile(0.75)
IQR=Q3-Q1
upper_limit= Q3 1.5*IQR
lower_limit= Q1-1.5*IQR
db_median= float(df[col].median())
In_median= float(df[col].median())
df[col]=np.where(df[col]>upper_limit,db_median,df[col])
df[col]=np.where(df[col]>upper_limit,In_median,df[col])
Тем не менее, код работает хорошо, используя для проверки boxplot… выбросы все еще там, также используют .describe()
… выбросы все еще отмечаются.
Любая помощь, пожалуйста
Ответ №1:
введите описание изображения здесь После использования опубликованного кода
>>> list_cols = ['DiabetesPedigreeFunction','Insulin']
>>> df[list_cols] = np.where(((df[list_cols] - df[list_cols].mean()) / df[list_cols].std()).abs() >= 3, df[list_cols].median(), df[list_cols])
Результаты остаются аналогичными моему предыдущему коду…просмотр изображения
>>> df["DiabetesPedigreeFunction"].describe()
count 768.000000
mean 0.449800
std 0.279715
min 0.078000
25% 0.243750
50% 0.371750
75% 0.602000
max 1.461000
Name: DiabetesPedigreeFunction, dtype: float64
Комментарии:
1. хорошо…вот ссылка kaggle.com/uciml/pima-indians-diabetes-database
2. Данные необходимо было очистить из-за того, что некоторые переменные были пронизаны нулями (0). например, инсулин, ИМТ пациента не может быть равен нулю, поэтому его пришлось заменить на Nan, а затем среднее/медианное значение с помощью функции». replace»… Затем мы переходим к той части, насколько искажены данные … которые на самом деле пронизаны выбросами.