1
resposta

json_normalize em uma lista de listas

A minha dúvida é: No caso do json que estamos usando no curso, a estrutura vem com normal...{output...{listings...

como faço para normalizar um json de listas?


Ex. `[
    [
       {
          "dispute_id":"Pasdfasdfasdf",
          "disputed_transactions":[
             {
                "buyer_transaction_id":"asdfasdf"
             }
          ],
          "dispute_state":"REQUIRED_ACTION",
          "links":[
             {
                "href":"https://api-m.exemplo.com/v1/customer/disputes/asdfasdfasdf",
                "rel":"self",
                "method":"GET"
             }
          ]
       }], [
    [
       {
          "dispute_id":"asdfasdfasdf",
          "disputed_transactions":[
             {
                "buyer_transaction_id":"asdfasdf"
             }
          ],
          "dispute_state":"REQUIRED_ACTION",
          "links":[
             {
                "href":"https://api-m.exemplo.com/v1/xxx/disputes/asdfasdfasdf",
                "rel":"self",
                "method":"GET"
             }
          ]
       }]
       ]`
1 resposta

Oii Ana! Tudo certinho?

Peço desculpas pela demora em dar um retorno.

Suponha que temos o seguinte conjunto de dados:

import pandas as pd

dados = [
    [
        {'nome': 'Caroline', 'idade': 25}, 
        {'nome': 'Ana', 'idade': 12}
    ],
    [ 
        {'nome': 'Ricardo', 'idade': 44}, 
        {'nome': 'Luiza', 'idade': 32}
    ],
    [ 
        {'nome': 'Daniel', 'idade': 27}, 
        {'nome': 'João', 'idade': 56}
    ]
]

Observe que esses dados estão ordenados como uma lista de listas.

O primeiro passo que podemos fazer é transformar esses dados em uma Series e em seguida em um DataFrame, da seguinte forma:

dados = pd.Series(dados).to_frame(name='dados')
dados

Resultado:

dados
0[{'nome': 'Caroline', 'idade': 25}, {'nome': 'Ana', 'idade': 12}]
1[{'nome': 'Ricardo', 'idade': 44}, {'nome': 'Luiza', 'idade': 32}]
2[{'nome': 'Daniel', 'idade': 27}, {'nome': 'João', 'idade': 56}]

Após isso, podemos utilizar o método explode para expandir o conteúdo das listas nas linhas do DataFrame:

dados = dados.explode(column='dados', ignore_index=True)
dados

Resultado:

dados
0{'nome': 'Caroline', 'idade': 25}
1{'nome': 'Ana', 'idade': 12}
2{'nome': 'Ricardo', 'idade': 44}
3{'nome': 'Luiza', 'idade': 32}
4{'nome': 'Daniel', 'idade': 27}
5{'nome': 'João', 'idade': 56}

Agora, podemos aplicarmos o json_normalize no DataFrame atual para separar os dados em colunas diferentes do DataFrame:

pd.json_normalize(data=dados['dados'])

Resultado:

nomeidade
0Caroline25
1Ana12
2Ricardo44
3Luiza32
4Daniel27
5João56

Espero que isso ajude. Qualquer dúvida estou à disposição :)

Bons estudos!