Olá, Alison, tudo bem?
No curso, foi carregado o JSON, feito a normalização com json_normalize()
e inclusive utilizamos o explode()
para transformar listas em várias linhas. Isso gera um DataFrame
com colunas planificadas.
Mas neste desafio, você está recarregando o JSON cru novamente com pd.read_json(url)
, sem aplicar json_normalize()
e sem extrair descricao_vizinhanca
de forma correta, e é por isso que o erro ocorre: o campo
'descricao_vizinhanca' não existe nesse DataFrame
.
Para solucionar, você precisa reutilizar o DataFrame
que foi normalizado, ou fazer a normalização novamente nessa célula.
Solução 1 – Reutilizar os dados normalizados:
# Considerando que você já fez isso antes:
# dados = pd.json_normalize(dados['info_moveis'])
# dados = dados.explode(colunas[3:])
# Aqui, apenas prepara a nova coluna com base em 'descricao_local'
dados['descricao_vizinhanca'] = dados['descricao_local'].str.lower()
dados['descricao_vizinhanca'] = dados['descricao_vizinhanca'].str.replace('[^a-zA-Z0-9\-\']', ' ', regex=True)
dados['descricao_vizinhanca'] = dados['descricao_vizinhanca'].str.replace('(?<!\w)-(?!\w)', '', regex=True)
dados['descricao_vizinhanca'] = dados['descricao_vizinhanca'].str.split()
dados.head()
Solução 2 – Se você quiser deixar o desafio independente:
import pandas as pd
# Carregar e normalizar diretamente
url = '/content/dados_hospedagem.json'
dados_raw = pd.read_json(url)
dados = pd.json_normalize(dados_raw['info_moveis'])
# Certifique-se de que 'descricao_local' seja texto (não lista)
dados['descricao_vizinhanca'] = dados['descricao_local'].apply(lambda x: ' '.join(x).lower())
# Limpeza
dados['descricao_vizinhanca'] = dados['descricao_vizinhanca'].str.replace('[^a-zA-Z0-9\-\']', ' ', regex=True)
dados['descricao_vizinhanca'] = dados['descricao_vizinhanca'].str.replace('(?<!\w)-(?!\w)', '', regex=True)
dados['descricao_vizinhanca'] = dados['descricao_vizinhanca'].str.split()
dados.head()
Com isso, o erro de KeyError: 'descricao_vizinhanca'
desaparece e a coluna é processada corretamente!
Escolha apenas uma dessas opções acima.
Espero ter ajudado.
Qualquer dúvida, não hesite em compartilhar no fórum.
Abraços!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado