1
resposta

Excluindo outliers de mais de uma coluna

Saudações! Eu estou fazendo um projeto para colocar em prática o que aprendi. Nesse meu projetinho, eu também tenho que remover outliers, e portanto agrupei meu dataset com groupby(). Meu projeto consiste numa análise de apartamentos para alugar na minha cidade, e decidi os agrupar por bairro. Eles têm os seguintes atributos: Valor, Área, Nº de Vagas e Nº de Quartos. Eu quero fazer esse mesmo procedimento ensinado para todos os atributos, porém, na aula ele ensina apenas para um. Imagino que para fazer para mais, seja necessário que exista mais outro for para iterar pelas colunas (atributos)

bairros = dados.groupby(by = "Bairro")

Q1 = bairros.quantile(0.25)
Q3 = bairros.quantile(0.75)
IIQ = Q3 - Q1
lim_inf = Q1 - 1.5*IIQ
lim_sup = Q3 + 1.5*IIQ

aluguel = pd.DataFrame()
for bairro in bairros.groups.keys():
    qual_bairro = dados["Bairro"] == bairro
    dentro = (dados["Valor"] >= lim_inf[bairro] & dados["Valor"] <= lim_sup[bairro])
    selecao = qual_bairro & dentro
    df_selecao = dados[selecao]
    aluguel = pd.concat([aluguel, df_selecao])

Detalhe: por algum motivo esse código não funciona também. O erro que dá se lê: "ufunc 'bitwise_and' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''". Não sei muito bem o porquê do erro, mas ficam sendo essas duas dúvidas no ar. Obrigado pela ajuda!

1 resposta

Opa, boa tarde.

O que acontece é que você está fazendo 3 filtros diferentes e cada um desses filtros precisa ser colocado entre parênteses para que o pandas consiga distinguir cada uma.

Testa rodar o código dessa forma:

for bairro in bairros.groups.keys():
    qual_bairro = (dados["Bairro"] == bairro)
    dentro = ((dados["Valor"] >= lim_inf[bairro]) & (dados["Valor"] <= lim_sup[bairro]))
    selecao = qual_bairro & dentro
    df_selecao = dados[selecao]
    aluguel = pd.concat([aluguel, df_selecao])