Удалить строки из набора данных в 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])
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)