Как удалить выбросы в наборе данных, который содержит как категориальные, так и числовые данные?

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

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

lower_limit = pq1 - 1.5 *iqr
upper_limit = pq3 + 1.5 *iqr

newdf = df[((df['price'] < lower_limit) | (df['price'] > upper_limit))]
newdf

Я пытался использовать знак тильды (~) до того, как указал логические операции, но это не дало желаемых результатов.


person Cedric Bansah    schedule 24.09.2020    source источник
comment
Попробуйте df.loc[... вместо df[... и прочитайте документы pandas по индексации.   -  person Griffin    schedule 24.09.2020


Ответы (2)


Обратное может быть:

newdf = df[((df['price'] > lower_limit) & (df['price'] < upper_limit))]
person gtomer    schedule 24.09.2020

Вы можете использовать атрибут .loc, чтобы получить образец исходного фрейма данных, который исключает элементы фрейма данных newdf через индексы:

lower_limit = pq1 - 1.5 *iqr
upper_limit = pq3 + 1.5 *iqr

newdf = df[((df['price'] < lower_limit) | (df['price'] > upper_limit))]
df_not_outliers = df.loc[set(df.index) - set(newdf.index)]
person Galo Castillo    schedule 25.09.2020