Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Normalização de dados json

Boa tarde. quando digo, x = pd.json_normalize(y.coluna, sep='_', record_path=('listings')) esse listings é uma propriedade que se refere à lista de dicionários, ou a chave nesse caso específico, cada isonomia terá uma chave diferente para sua lista de dicionários.?

2 respostas

Oii Danival! Tudo tranquilo?

Peço desculpas pela demora em dar um retorno.

No caso do arquivo json utilizado no curso, o listings é uma lista de arquivos json, que se encontra tanto na coluna “normal” quanto na coluna “highlights”. Observe:

Estrutura do arquivo json utilizado no curso. Nele os arquivos json estão dispostos seguindo a seguinte estrutura JSON > normal > output > listings. A mesma estrutura de arquivos da coluna “normal” também encontra-se na coluna “highlights”. Esses arquivos são representados por chaves “{}” com exceção do listings que, por se tratar de uma lista é representado por colchetes

Quando utilizamos o json_normalize e passamos apenas o parâmetro data, esse método irá expandir nosso arquivo json, criando colunas. No entanto, ele só expande enquanto temos arquivos json, ou seja, se ele se deparar com um arquivo que não seja um json (dicionário), como uma lista, um número ou uma string, ele para de navegar nesse arquivo e já transforma, até o ponto onde ele expandiu, em uma coluna.

No caso do arquivo da aula, então, ao fazer dados_normal = pd.json_normalize(data = dados.normal) o método expande o arquivo json normal > output e para de expandir em listings, já que essa variável é uma lista. Deixando o dataframe assim:

Executando o código da aula com o método json.normalize sendo utilizado para expandir o arquivo json apresentado na imagem anterior. Como resultado desse código tempo um dataframe de apenas uma linha de índice 0 e uma coluna chamada “listings” com alguns dicionários dispostos da seguinte forma: {‘imóvel’: {‘tipos’: {‘propriedade’: ‘Casa’}...

Sendo assim, para resolver isso, e fazer com que o método json_normalize também expanda essa lista, utilizamos o parâmetro record_path e passamos o nome da lista. Assim o método vai entender que listings não é um json, mas que também desejamos expandi-la.

Executando o código da aula no qual é utilizado o método json.normalize com o parâmetro “record_path”. Para esse parâmetro é passado a lista “listings”. Como resultado, obtém-se um dataframe bem estruturado. As colunas apresentadas são: imovel_tipos_propriedade, imovel_endereco_bairro e imovel_endereco_localizacao_type. Esse dataframe apresenta 3 linhas

Dessa forma, podemos perceber que esse método vai variar para cada caso. Tudo vai depender de como seu arquivo json está estruturado. Então, pode ser que seja necessário utilizar o parâmetro record_path especificando uma variável que não seja json, ou caso você tenha um arquivo json que realmente tenha apenas arquivos json, nem seja necessário especificar tal parâmetro.

Espero que tenha conseguido ajudá-lo! Qualquer dúvida estamos à disposição :)

Bons estudos!

solução!

Muito obrigado,