我有一些从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转换为Pandas DataFrame:
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']
是否有更优雅/ Pythonic的方法(例如可能使用pandas.io.json.read_json)?
答案 0 :(得分:2)
read_json
的{{1}}函数是一种非常棘手的使用方法。如果你不确定JSON对象的有效性或者它的初始结构是否足够健全以构建数据框架,那么坚持使用经过试验和测试的方法将数据分解为pandas
可以毫无问题地使用的东西。
在您的情况下,我建议将您的数据分解为列表列表。在所有JSON中,您真正需要的唯一部分是pandas
和data
键。
试试这个:
column
这给了我想要的结果:
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
答案 1 :(得分:0)
请参阅pandas.io.json.read_json(path_or_buf =无,orient = None,typ ='frame',dtype = True,convert_axes = True,convert_dates = True,keep_default_dates = True,numpy = False,precise_float = False, date_unit相同=无
http://pandas.pydata.org/pandas-docs/dev/generated/pandas.io.json.read_json.html