Python JSON给熊猫:有更优雅的解决方案吗?
我有一些从API调用返回的JSON,看起来像这样:Python JSON给熊猫:有更优雅的解决方案吗?,python,json,pandas,Python,Json,Pandas,我有一些从API调用返回的JSON,看起来像这样: { "result": { "code": "OK", "msg": "" }, "report_name": "FAMOUS_DICTATORS", "columns": [ "rank", "name", "deaths" ], "data": [ { "row": [
{
"result": {
"code": "OK",
"msg": ""
},
"report_name": "FAMOUS_DICTATORS",
"columns": [
"rank",
"name",
"deaths"
],
"data": [
{
"row": [
1,
"Mao Zedong",
63000000
]
},
{
"row": [
2,
"Jozef Stalin",
23000000
]
}
]
}
我想将JSON转换为数据帧:
rank name deaths
1 Mao Zedong 63000000
2 Jozef Stalin 23000000
我写了这封信,效果不错,但看起来有点难看:
import pandas as pd
import json
columns = eval(r.content)['columns']
df = pd.DataFrame(columns = eval(r.content)['columns'])
for row in eval(r.content)['data']:
df.loc[len(df)+1] = row['row']
是否有一种更优雅的/类似Python的方法(例如,可能使用pandas.io.json.read\u json)?请参阅pandas.io.json.read\u json(path\u或\u buf=None,orient=None,typ='frame',dtype=True,convert\u axes=True,convert\u dates=True,keep\u default\u dates=True,numpy=False,precisive\u float=False,date\u unit=None)
熊猫的
read_json
函数是一种非常棘手的使用方法。如果您不确定json对象的有效性,或者不知道它的初始结构是否足够合理以构建数据框架,那么最好坚持使用经过验证和测试的方法,将数据分解为pandas
可以100%无问题使用
在您的情况下,我建议将数据分解为列表列表。在所有JSON中,您真正需要的唯一部分是data
和列
键
试试这个:
import pandas as pd
import json
import urllib
js = json.loads(urllib.urlopen("test.json").read())
data = js["data"]
rows = [row["row"] for row in data] # Transform the 'row' keys to list of lists.
df = pd.DataFrame(rows, columns=js["columns"])
print df
这给了我想要的结果:
rank name deaths
0 1 Mao Zedong 63000000
1 2 Jozef Stalin 23000000
这对任何事情都没有帮助。OP已经知道这个函数了。除非你能给OP提供一个如何使用它的例子,否则最好作为一个注释。