#python #pandas
#python #pandas
Вопрос:
Я пытаюсь получить доступ data.gov.au наборы данных через их CKAN data API. К сожалению, инструкции API данных немного устарели и, похоже, не работают. Инструкции можно найти здесь.
До сих пор я выяснил, что я предназначен для запроса набора данных с помощью urllib.request
.
import urllib.request
req = urllib.request.Request('https://data.sa.gov.au/data/api/3/action/datastore_search?resource_id=86d35483-feff-42b5-ac05-ad3186ac39de')
with urllib.request.urlopen(req) as response:
data = response.read()
При этом создается объект типа bytes, который выглядит как структура данных словаря, в которой, по-видимому, хранится набор "records:"
данных.
Мне интересно, как я могу преобразовать записи данных в фрейм данных Pandas. Я попытался преобразовать объект bytes в строку и прочитать его как файл json, но результат неверный.
# code that did not work
result = str(data, 'utf-8')
rdata = StringIO(result)
df = pd.read_json(rdata)
df
Результат, который я хотел бы вернуть, выглядит следующим образом:
Спасибо!
Ответ №1:
Вот решение, которое работает:
import numpy as np
import pandas as pd
import requests
import json
url = "https://data.sa.gov.au/data/api/3/action/datastore_search?resource_id=86d35483-feff-42b5-ac05-ad3186ac39de"
JSONContent = requests.get(url).json()
content = json.dumps(JSONContent, indent = 4, sort_keys=True)
print(content)
df = pd.read_json(content)
df.to_csv("output.csv")
df = pd.json_normalize(df['result']['records'])
Вы действительно были близки к решению. Это только последний шаг df=pd.json_normalize(df['result']['records'])
, который вы пропустили.