Удалить строки из набора данных в Python

Я пытаюсь взять несколько строк, которые классифицируются как выбросы, и удалить эти строки из исходного набора данных, но я не могу заставить его работать - вы, ребята, знаете, что идет не так? Я пытаюсь запустить следующий код и получаю сообщение об ошибке «ValueError: данные индекса должны быть одномерными».

      #identify outliers
pred = iforest.fit_predict(x)
outlier_index = np.where(pred==-1)
outlier_values = x.iloc[outlier_index]
#remove from dataset (dataset = x)
x_new = x.drop([outlier_values])

outlier_valuesисходный набор данных

2 ответа

Решение

Связанные вами outlier_values ​​- это фрейм данных, а не простой список индексов, поэтому соответственно возникает ошибка значения.

Что вам нужно сделать, так это извлечь список индексов из фрейма данных outlier_values, используя:

      index_list = outlier_values.index.values.tolist() 

в список индексов, а затем удалите эти индексы из x.

как в этом ответе

Попробуй это

      #identify outliers
pred = iforest.fit_predict(x)

# np.where returns a tuple of ndarray we access the first dimension
outlier_index = np.where(pred==-1)[0] 

outlier_values = x.iloc[outlier_index]

#remove from dataset (dataset = x)
x_new = x.drop([outlier_values])

В вашем случае вы можете напрямую передать outlier_index как так

      #identify outliers
pred = iforest.fit_predict(x)
outlier_index = np.where(pred==-1)[0]
df = df.drop(outlier_index)
Другие вопросы по тегам