将CKAN数据API调用从字节转换为数据帧

2024-09-26 17:53:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图通过他们的CKAN数据API访问data.gov.au数据集。 不幸的是,数据API指令有点过时,似乎不起作用Instructions found here

到目前为止,我已经知道我应该使用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()  

这将生成一个字节类型的对象,看起来像字典数据结构,其中数据集似乎存储在"records:"

enter image description here

我想知道如何将数据记录转换成数据帧。我尝试将bytes对象转换为字符串并将其作为json文件读取,但输出错误

# code that did not work
result = str(data, 'utf-8')
rdata = StringIO(result)
df = pd.read_json(rdata)
df

Wrong output

我要返回的输出如下所示:

enter image description here

谢谢


Tags: 数据对象apijsondfreaddataresponse
1条回答
网友
1楼 · 发布于 2024-09-26 17:53:52

以下是一个有效的解决方案:

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'])

你实际上已经接近解决方案了。这只是你错过的最后一步

enter image description here

相关问题 更多 >

    热门问题