Сообщение об ошибке: не удалось передать операнды вместе с фигурами (65536,) (2,)

#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 исправления:

  1. Вы не задаете переменные upper_bound или lower_bound внутри функции, поэтому я предполагаю, что на самом деле они должны быть Lsup и Linf .
  2. Я предполагаю, что вы имели в виду использовать десятичные дроби вместо запятых при установке Lsup и Linf . Это должно указывать на ошибку, которую вы получили (так как использование запятой делает их кортежами).
  3. Однако вы обнаружите, что получаете еще одну ошибку, которую можно исправить с помощью 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