Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Ler um arquivo JSON com python e imprimir os dados em formato tabular

O arquivo é "grades.json", cuja estrutura é:

 {"students": [{"name": "Alan", "lastname": "Silva", "exam1": 50, "exam2": 80, "exam3": 91},
    {"name": "Paula", "lastname": "Souza", "exam1": 95, "exam2": 98, "exam3": 99}]
    }

Objetivo: Ler o arquivo "grades.json" e mostrar os dados em formato tabular, incluindo uma coluna adicional com a média de cada estudante a direita das notas dos exames e uma linha adicional com a média da turma em cada exame.

EU tentei usar o pandas mas não consigo fazer nada além de ler o JSON:

import pandas as pd
import numpy as np

dt = pd.read_json("grades.json")
print(dt)

Alguma ideia?

1 resposta
solução!

Olá Edson, tudo bom?

Como tô aprendendo, não sabia ao certo como funciona esse tal de .json. Então o que fiz aqui não sei se funciona para todos os casos, mas funcionou para esse.

Para conseguir responder a sua dúvida, tive que criar uma função que cria um arquivo .json com um dicionário formado com os dados do exemplo que você colocou aqui.

# Importar as bibliotecas necessárias
import pandas as pd
import json

# Exemplo  de um dicionário que virará um arquivo .json
dict = {"students": [{"name": "Alan", "lastname": "Silva", "exam1": 50, "exam2": 80, "exam3": 91},
    {"name": "Paula", "lastname": "Souza", "exam1": 95, "exam2": 98, "exam3": 99}]
    }

# Criar uma função que escreve um arquivo .json
def escrever_json(dados):
    with open('meu_arquivo.json', 'w', encoding='utf8') as f:
        json.dump(dados, f, ensure_ascii=False, sort_keys=True, indent=4, separators=(',', ':'))

Depois criei outra função para ler o arquivo gerado.

# Criar uma função que lê o arquivo .json
def ler_json(arq_json):
    with open(arq_json, 'r', encoding='utf8') as f:
        return json.load(f)

Só depois é que criei uma lógica que colocasse os dados do arquivo .json do exemplo dado em um DataFramedo pandas.

# Chamar a função escreve_jason()
escrever_json(dict)

# Ler o arquivo .json e jogar na variável 'data'
data = ler_json('meu_arquivo.json')

# Pegar as chaves de dentro de 'students' e jogar na variável 'keys'
keys = data['students'][0].keys()

# Pegar os de dentro de 'students' e jogar na variável 'values'
values = data['students'][0].values()

# Finalmente, criar a tabela que você queria em um DataFrame
df = pd.DataFrame(values, index=keys, columns=['Valores'])
df

O resultado saiu assim aqui no Jupyter:

            Valores
exam1            50
exam2            80
exam3            91
lastname        Silva
name            Alan

Bem provável que exista uma forma diferente que seja beeeem mais fácil que esta e que funcione para todo e qualquer arquivo .json, mas eu não sei como fazer. Porém, para o seu exemplo, esse código funciona.

Espero ter dado ao menos uma luz aí.

Até!