domingo, 9 de agosto de 2020

Lendo o formato de dados JSON

Photo by Hello I'm Nik 🎞 on Unsplash

Um dos formatos mais comum, para a transferência de dados pela internet, é o JavaScrip Object Notation - JSON. Você pode estar pensando que esse formato de transferência de dados só poderia ser utilizado na linguagem de JavaScript, muito provável mente pelo nome JavaScrip, mas isso não é verdade. Muitas outras linguagens de programação fazem uso desse formato de transferência de dados, entre elas o python. O python já vem com um módulo para decodificar e codificar dados no formato JSON.

>>> import pandas as pd
>>> import json
>>> dados =  '{"nome":["Diana", "Fabiana", "Eveline"], "aniversario":[1998, 1991, 1995]}'
>>> pessoas = json.loads(dados)
>>> encoded = json.dumps(pessoas)
>>> encoded
'{"nome": ["Diana", "Fabiana", "Eveline"], "aniversario": [1998, 1991, 1995]}'

Trabalhando com JSON e pandas

Para o nosso primeiro exemplo vamos ler os dados no formato JSON e criar um dataframe pandas com esses dados. Você pode notar muita semelhança com o tipo de dados dicionário do python.

>>> pessoas = pd.read_json(encoded)
>>> pessoas
      nome  aniversario
0    Diana         1998
1  Fabiana         1991
2  Eveline         1995

Quando trabalhamos com dados JSON precisamos ter a certeza que esses dados estão no formato certo para que a biblioteca pandas possa carregá-lo corretamente. A biblioteca pandas tem suporte aos dados JSON nas seguintes orientações:

  • columns - (padrão) um mapeamento de nomes de colunas para uma lista de valores nas colunas.
  • records - uma lista de linhas. Cada linha é um dicionário que mapeia uma coluna para um valor.
  • split - Um mapeamento de columns para nomes de colunas, index para valores de índice e dados para uma lista de cada linha de dados (cada linha também é uma lista).
  • index - Um mapeamento do valor do index para uma linha. Uma linha é um dicionário que mapeia uma coluna para um valor.
  • values - uma lista de cada linha de dados (cada linha também é uma lista). Não inclui valores de coluna ou índice.
  • table - Um mapeamento de schema para o esquema DataFrame e dados para uma lista de dicionários.

Veja exemplos com diferentes orientações:

>>> records = pessoas.to_json(orient='records')
>>> records
'[{"nome":"Diana","aniversario":1998},{"nome":"Fabiana","aniversario":1991},{"nome":"Eveline","aniversario":1995}]'
>>> pd.read_json(records, orient='records')
      nome  aniversario
0    Diana         1998
1  Fabiana         1991
2  Eveline         1995

>>> split = pessoas.to_json(orient='split')
>>> split
'{"columns":["nome","aniversario"],"index":[0,1,2],"data":[["Diana",1998],["Fabiana",1991],["Eveline",1995]]}'
>>> pd.read_json(split, orient='split')
      nome  aniversario
0    Diana         1998
1  Fabiana         1991
2  Eveline         1995

O método loads() retorna um dicionário, por isso podemos ler os dados de apenas uma colunas.

>>> pessoas = json.loads(dados)
>>> type(pessoas)
<class 'dict'>
>>> pessoas['nome']
['Diana', 'Fabiana', 'Eveline']

Em algumas situações, pode ser mais fácil trabalhar com dicionários do que com JSON.

Referência:
Módulo JSON
Método read_json()
Método to_json()

0 comentários:

Postar um comentário