1
resposta

ERRO NO CÓDIGO

limite_superior['Apartamento']

---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\indexes\base.py in get_loc(self, key, method, tolerance)
   3079             try:
-> 3080                 return self._engine.get_loc(casted_key)
   3081             except KeyError as err:

pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas\_libs\hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()

pandas\_libs\hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()

KeyError: 'Apartamento'

The above exception was the direct cause of the following exception:

KeyError                                  Traceback (most recent call last)
<ipython-input-62-2a916f9468ad> in <module>
----> 1 limite_superior['Apartamento']

C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\frame.py in __getitem__(self, key)
   3022             if self.columns.nlevels > 1:
   3023                 return self._getitem_multilevel(key)
-> 3024             indexer = self.columns.get_loc(key)
   3025             if is_integer(indexer):
   3026                 indexer = [indexer]

C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\indexes\base.py in get_loc(self, key, method, tolerance)
   3080                 return self._engine.get_loc(casted_key)
   3081             except KeyError as err:
-> 3082                 raise KeyError(key) from err
   3083 
   3084         if tolerance is not None:

KeyError: 'Apartamento'

O erro se repete para o comando:

dados_new = pd.DataFrame()
for tipo in grupo_tipo.groups.keys():
    eh_tipo = dados['Tipo'] == tipo
    eh_dentro_limite = (dados['Valor'] >= limite_inferior[tipo]) & (dados['Valor'] <= limite_superior[tipo])
    selecao = eh_tipo & eh_dentro_limite
    dados_selecao = dados[selecao]
    dados_new = pd.concat([dados_new, dados_selecao])
1 resposta

Olá, Adolfo. Tudo bem?

Peço desculpas pela demora em responder.

Tentando repetir os passos realizados na aula até chegar no seu código, resolvi ler o csv novamente, com a seguinte linha de código:

dados = pd.read_csv('dados/aluguel_residencial.csv', sep = ';')
print(dados.head())

Saída resultante:

TipoBairroQuartosVagasSuitesAreaValorCondominioIPTUValor m2Tipo Agregado
0QuitineteCopacabana1004017005006042.5Apartamento
1CasaJardim Botânico20110070000070Casa
2ApartamentoCentro100158003902053.33Apartamento
3ApartamentoHigienópolis10048800230016.67Apartamento
4ApartamentoCachambi2005013003011726Apartamento

Agora que temos os dados, vou criar o grupo dos tipo de valores, com a seguinte linha de código:

grupo_tipo = dados.groupby('Tipo')['Valor']

A partir disso, podemos dividir os quantis do grupo de tipo e extrair os limites inferiores e superiores, dessa forma:

Q1 = grupo_tipo.quantile(.25)
Q3 = grupo_tipo.quantile(.75)
IIQ = Q3 - Q1
limite_inferior = Q1 - 1.5 * IIQ
limite_superior = Q3 + 1.5 * IIQ

Podemos ver que no limite_superior utilizando o seguinte código:

print(limite_superior)

Resultado:

TipoValor
Apartamento9950
Casa22850
Casa de Condomínio32125
Casa de Vila3375
Quitinete2400

Por fim, para exibirmos o limite superior somente do Apartamento, podemos executar o mesmo código que você executou:

limite_superior['Apartamento']

Agora, teremos o resultado esperado:

9950.0

Você pode seguir estes mesmos passos.

Espero ter ajudado, Adolfo. Qualquer dúvida, estou à disposição. Bons estudos =)

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!