Python 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": [

我有一些从API调用返回的JSON,看起来像这样:

{
    "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提供一个如何使用它的例子,否则最好作为一个注释。