将API输出转换为Pandas Dataframe时出现问题

时间:2019-11-14 14:24:58

标签: python json python-3.x pandas dataframe

我具有以下格式的API输出。

reponse.text

'{"position": {"lat": 1.352083, "lon": 103.819836}, "mapView": {"N": 1.4784001, "E": 104.0945001, "S": 1.1496, "W": 103.594}}\n'

我想将此输出转换为pandas数据框。

我的代码

import json
d = json.loads(response.text)
df = pd.DataFrame(d)

当前输出

    position    mapView
E   NaN            104.0945
N   NaN             1.4784
S   NaN             1.1496
W   NaN            103.5940
lat 1.352083        NaN
lon 103.819836      NaN

我的预期输出

lat       lon
1.352083  103.819836 

如何在python中实现?

3 个答案:

答案 0 :(得分:2)

您非常亲密。从熊猫中导入json_normalize,然后您可以简单地使用

from pandas.io.json import json_normalize

jsonData = json.loads(response.text)

df = json_normalize(jsonData)

print(df)

position.lat  position.lon  mapView.N  mapView.E  mapView.S  mapView.W
    1.352083    103.819836     1.4784   104.0945     1.1496    103.594

然后只需删除多余的列并正确重命名即可。

答案 1 :(得分:0)

import pandas as pd
import json
d = json.loads(response.text)

df =pd.DataFrame([d['position']])

enter image description here

答案 2 :(得分:0)

您只想使用位置键,而将json解析器创建的整个字典作为参数传递。

请检查DataFrame构造函数文档页面here中的其他参数。

>>> import pandas as pd
>>> import json
>>> api_resp = json.loads('{"position": {"lat": 1.352083, "lon": 103.819836}, "mapView": {"N": 1.4784001, "E": 104.0945001, "S": 1.1496, "W": 103.594}}\n')
>>> api_resp
{'position': {'lat': 1.352083, 'lon': 103.819836}, 'mapView': {'N': 1.4784001, 'E': 104.0945001, 'S': 1.1496, 'W': 103.594}}
>>> df = pd.DataFrame(data=api_resp['position'], index=[0])
>>> df
        lat         lon
0  1.352083  103.819836