@gustavomadmax, quando você pega os dados com r.json()["results"]
, eles já não estão mais em formato JSON e sim numa lista de dicionários em Python. Para importar num DataFrame
do pandas você precisa, nesse caso, usar a função DataFrame.from_dict
.
Criei um código baseado no seu, deixando a consulta mais flexível e fazendo as alterações necessárias - utilize o DataFrame casos_ribeirao_preto
:
import pandas as pd
import requests
url = "https://brasil.io/api/dataset/covid19/caso/data/"
query_string = {"city": "Ribeirão Preto", "state": "SP", "format": "json"}
headers = {"User-Agent": "python-urllib"}
response = requests.get(url, params=query_string, headers=headers)
results = response.json()["results"]
casos_ribeirao_preto = pd.DataFrame.from_dict(results)
Atenção: a API do Brasil.IO em breve será autenticada, devido aos recentes abusos (acompanhe mais novidades em nosso Telegram). Por isso, sugiro baixar o arquivo completo de data.brasil.io e então fazer os filtros que necessita, ou então esperar o cadastro para alterar seu código para uma versão autenticada.
A versão que faz download do código completo é preferível, dado que onera menos nossos servidores - mas aumenta o tempo de download e processamento local. Exemplo de código:
import gzip
import io
import pandas as pd
import requests
url = "https://data.brasil.io/dataset/covid19/caso.csv.gz"
headers = {"User-Agent": "python-urllib"}
response = requests.get(url, params=query_string, headers=headers)
df = pd.read_csv(io.BytesIO(gzip.decompress(response.content)))
casos_ribeirao_preto = df[df["city"] == "Ribeirão Preto"]
Nota: você chama uma variável de caso_full
, mas está buscando a tabela caso
, que é diferente. Veja a documentação da API para entender a diferença entre elas.