如何在Python中将JSON post请求转换为数据帧
我对蟒蛇和熊猫还不熟悉,但我想做一些关于瑞典人口的真实统计,这是一个有趣的项目。要检索此SCB(瑞典统计数据库),请使用API。我已经用下面的代码访问了一些数据,但我仍然不知道如何将响应转换为数据帧 下面是我的代码:如何在Python中将JSON post请求转换为数据帧,python,json,dataframe,Python,Json,Dataframe,我对蟒蛇和熊猫还不熟悉,但我想做一些关于瑞典人口的真实统计,这是一个有趣的项目。要检索此SCB(瑞典统计数据库),请使用API。我已经用下面的代码访问了一些数据,但我仍然不知道如何将响应转换为数据帧 下面是我的代码: import json import requests import urllib.request import pandas as pd #API Settings url="http://api.scb.se/OV0104/v1/doris/sv/ssd/" amnesid=
import json
import requests
import urllib.request
import pandas as pd
#API Settings
url="http://api.scb.se/OV0104/v1/doris/sv/ssd/"
amnesid="BE/"
level1="BE0101/"
level2="BE0101A/"
level3="BefolkningNy/"
urlPost= url + amnesid + level1 +level2 +level3
#Post Request
url = urlPost
payload = {
"query": [{"code":"Region", "selection":{"filter":"item",
"values":["00"]}}],
"response": {"format":"json"}
}
r = requests.post(url, data=json.dumps(payload))
print(r.text)
以下是控制台输出:
{"columns":[{"code":"Region","text":"region","type":"d"},
{"code":"Tid","text":"år","type":"t"},
{"code":"BE0101N1","text":"Folkmängd","comment":"Uppgifterna avser
förhållandena den 31 december för valt/valda år enligt den regionala
indelning som gäller den 1 januari året efter.\r\n","type":"c"},
{"code":"BE0101N2","text":"Folkökning","comment":"Folkökningen definieras
som
skillnaden mellan folkmängden vid årets början och årets
slut.\r\n","type":"c"}],"comments":[],"data":[{"key":["00","1968"],"values":
["7931193",".."]},{"key":["00","1969"],"values":["8004270","73077"]},{"key":
["00","1970"],"values":["8081142","76872"]},{"key":["00","1971"],"values":
["8115165","34023"]},{"key":["00","1972"],"values":["8129129","13964"]},
{"key":["00","1973"],"values":["8144428","15299"]},{"key":
["00","1974"],"values":["8176691","32263"]},{"key":["00","1975"],"values":
["8208442","31751"]},{"key":["00","1976"],"values":["8236179","27737"]},
{"key":["00","1977"],"values":["8267116","30937"]},{"key":
["00","1978"],"values":["8284437","17321"]},{"key":["00","1979"],"values":
["8303010","18573"]},{"key":["00","1980"],"values":["8317937","14927"]},
{"key":["00","1981"],"values":["8323033","5096"]},{"key":
["00","1982"],"values":["8327484","4451"]},{"key":["00","1983"],"values":
["8330573","3089"]},{"key":["00","1984"],"values":["8342621","12048"]},
{"key":["00","1985"],"values":["8358139","15518"]},{"key":
["00","1986"],"values":["8381515","23376"]},{"key":["00","1987"],"values":
["8414083","32568"]},{"key":["00","1988"],"values":["8458888","44805"]},
{"key":["00","1989"],"values":["8527036","68148"]},{"key":
["00","1990"],"values":["8590630","63594"]},{"key":["00","1991"],"values":
["8644119","53489"]},{"key":["00","1992"],"values":["8692013","47894"]},
{"key":["00","1993"],"values":["8745109","53096"]},{"key":
["00","1994"],"values":["8816381","71272"]},{"key":["00","1995"],"values":
["8837496","21115"]},{"key":["00","1996"],"values":["8844499","7003"]},
{"key":["00","1997"],"values":["8847625","3126"]},{"key":
["00","1998"],"values":["8854322","6697"]},{"key":["00","1999"],"values":
["8861426","7104"]},{"key":["00","2000"],"values":["8882792","21366"]},
{"key":["00","2001"],"values":["8909128","26336"]},{"key":
["00","2002"],"values":["8940788","31660"]},{"key":["00","2003"],"values":
["8975670","34882"]},{"key":["00","2004"],"values":["9011392","35722"]},
{"key":["00","2005"],"values":["9047752","36360"]},{"key":
["00","2006"],"values":["9113257","65505"]},{"key":["00","2007"],"values":
["9182927","69670"]},{"key":["00","2008"],"values":["9256347","73420"]},
{"key":["00","2009"],"values":["9340682","84335"]},{"key":
["00","2010"],"values":["9415570","74888"]},{"key":["00","2011"],"values":
["9482855","67285"]},{"key":["00","2012"],"values":["9555893","73038"]},
{"key":["00","2013"],"values":["9644864","88971"]},{"key":
["00","2014"],"values":["9747355","102491"]},{"key":["00","2015"],"values":
["9851017","103662"]},{"key":["00","2016"],"values":["9995153","144136"]},
{"key":["00","2017"],"values":["10120242","125089"]}]}
如果有人能帮助我,我将不胜感激。在评论中讨论后,答案是:
df = pd.DataFrame(json.loads(codecs.decode(bytes(r.text, 'utf-8'), 'utf-8-sig'))['data'])
这是你想要的吗
df=pd.DataFrame(r.json()['data'])
Yes正确,我想要包含年份和人口数量的数据。我尝试使用您的代码并打印,但出现了以下错误:json.decoder.JSONDecodeError:意外的UTF-8 BOM(使用UTF-8-sig解码):第1行第1列(char 0)尝试以下操作:df=pd.DataFrame(json.loads(codecs.decode(bytes)(r.text,'UTF-8'),'UTF-8-sig'))['data'])
get-KeyError:'data'。因此,尝试删除['data'],得到了以下结果:数据集维度{'Region':{'label':'Region','category':{'i…label Folkmängden efter Region,tabellinnehåll ochår source Statistiska centralbyrån(SCB)status{'50':'}更新的2018-09-05T11:52:00Z值[79311938004270808114281151658129129,…具有我想要的值,但没有年份。奇怪的是…如果我复制/粘贴问题中的代码并只添加这一行df=pd.DataFrame(json.loads(codecs.decode(bytes)(r.text,'utf-8'),'utf-sig'))['data')
,一切正常