У меня есть фрейм данных, и я пытаюсь очистить данные перед анализом.
Я отправляю пробные данные, так как мои данные немного сложны.
A B C D
30 24 13 41
30 25 14 45
30 27 15 44
30 28 16 43
31 21 12 4
31 2 17 99
3 89 99 45
78 24 0 43
35 252 12 45
36 23 13 44
Я пытаюсь разобраться с выбросами и пытаюсь рассчитать Модифицированную оценку Z (медиана) и IQR для фильтрации выбросов из данных, чтобы я мог получитьданные о качестве для дальнейшего анализа.
Я хочу рассчитать IQR, а затем Z балл для каждого столбца и отфильтровать выбросы для каждого столбца в фрейме данных.
Я пробовал несколько вещей дотеперь вроде:
IQR:
for col in df2.columns:
col = np.array([col])
q1_a = np.percentile(col, 25)
q3_a = np.percentile(col, 75)
iqr1 = q3_a - q1_a
print(iqr1)
Модифицированная оценка Z:
for col in df2.columns:
threshold = 3.5
col_zscore = col +'_zscore'
median_y = df[col].median()
print(median_y)
median_absolute_deviation_y = (np.abs(df2[col] - median_y)).median()
print(median_absolute_deviation_y)
modified_z_scores = 0.7413 *((df2[col] - median_y)/median_absolute_deviation_y)
print(modified_z_scores)
df2[col_zscore] = np.abs(modified_z_scores)
df2 = df2[(np.abs(df2[col_zscore]) < 3.5).all(axis=1)]
print(df2)
Но не получается правильный ответ.Функция не применяется к каждому столбцу и в конце создает блок данных моего намерения.Пожалуйста помоги.Спасибо.