#arrays #numpy
Вопрос:
Я пытаюсь удалить выбросы из фрейма данных:
df.shape
(65536, 3)
Для этого я создал функцию, где Тег-это метка столбцов:
def outliers(dataset, Tag):
Q1 = dataset[Tag].quantile(0.25)
Q3 = dataset[Tag].quantile(0.75)
IQR = Q3 -Q1
Lsup = Q3 1,5*IQR
Linf = Q1 - 1,5*IQR
list = dataset.index[(dataset[Tag] > upper_bound) or (dataset[Tag] < lower_bound)]
return list
Затем я создал пустой список для хранения выходных индексов из нескольких столбцов:
index_list = []
for columns in ['L4553', 'F5432']:
index_list.extend(outliers(df, columns))
После этого появится сообщение об ошибке:
operands could not be broadcast together with shapes (65536,) (2,)
Не могли бы вы, ребята, помочь мне, пожалуйста? Я не знаю, что делать.
Комментарии:
1. Появляется ли эта ошибка ниоткуда? без какого-либо контекста или обратной связи? Вам необходимо определить, какая операция имеет эту проблему, и изучить соответствующие переменные. Вы не можете делать такие вещи, как
или
<
на массивах с различными формами, подобными этому.
Ответ №1:
Для работы этого кода требуется 3 исправления:
- Вы не задаете переменные
upper_bound
илиlower_bound
внутри функции, поэтому я предполагаю, что на самом деле они должны бытьLsup
иLinf
. - Я предполагаю, что вы имели в виду использовать десятичные дроби вместо запятых при установке
Lsup
иLinf
. Это должно указывать на ошибку, которую вы получили (так как использование запятой делает их кортежами). - Однако вы обнаружите, что получаете еще одну ошибку, которую можно исправить с помощью
np.logical_or()
проверки значений, выходящих за пределы верхней или нижней границы.
С учетом этих изменений ваши коды должны выглядеть следующим образом:
import numpy as np
def outliers(dataset, Tag):
Q1 = dataset[Tag].quantile(0.25)
Q3 = dataset[Tag].quantile(0.75)
IQR = Q3 -Q1
Lsup = Q3 1.5*IQR
Linf = Q1 - 1.5*IQR
list = dataset.index[np.logical_or(dataset[Tag] > Lsup, dataset[Tag] < Linf)]
return list