JSON to Pandas: 有更优雅的解决方案吗?
JSON to Pandas: is there a more elegant solution?
我有一些 JSON,从 API 调用返回,看起来像这样:
{
"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']
是否有更多 elegant/Pythonic 方法来做到这一点(例如可能使用 pandas.io.json.read_json)?
参见 pandas.io.json.read_json(path_or_buf=None, orient=None, typ='frame', dtype=True, convert_axes=真,convert_dates=真,keep_default_dates=真,numpy=假,precise_float=假,date_unit=None
http://pandas.pydata.org/pandas-docs/dev/generated/pandas.io.json.read_json.html
pandas
的read_json
函数是一个非常难用的方法。如果您不确定 JSON 对象的有效性或它的初始结构是否足够健全以围绕其构建数据框,那么最好坚持使用久经考验的方法将数据分解为pandas
100% 可以正常使用。
对于您的情况,我建议将您的数据分解为列表列表。在所有 JSON 中,您真正需要的唯一部分是 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
这给了我想要的结果:
rank name deaths
0 1 Mao Zedong 63000000
1 2 Jozef Stalin 23000000
我有一些 JSON,从 API 调用返回,看起来像这样:
{
"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']
是否有更多 elegant/Pythonic 方法来做到这一点(例如可能使用 pandas.io.json.read_json)?
参见 pandas.io.json.read_json(path_or_buf=None, orient=None, typ='frame', dtype=True, convert_axes=真,convert_dates=真,keep_default_dates=真,numpy=假,precise_float=假,date_unit=None
http://pandas.pydata.org/pandas-docs/dev/generated/pandas.io.json.read_json.html
pandas
的read_json
函数是一个非常难用的方法。如果您不确定 JSON 对象的有效性或它的初始结构是否足够健全以围绕其构建数据框,那么最好坚持使用久经考验的方法将数据分解为pandas
100% 可以正常使用。
对于您的情况,我建议将您的数据分解为列表列表。在所有 JSON 中,您真正需要的唯一部分是 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
这给了我想要的结果:
rank name deaths
0 1 Mao Zedong 63000000
1 2 Jozef Stalin 23000000