在我的项目中,我使用flask,得到了一个JSON(通过REST API),该JSON的数据应转换为pandas Dataframe。 JSON如下:
{
"entity_data":[
{"id": 1, "store": "a", "marker": "a"}
]
}
我获取JSON并提取数据:
params = request.json
entity_data = params.pop('entity_data')
然后将数据转换为熊猫数据框:
entity_ids = pd.DataFrame(entity_data)
结果如下:
id marker store
0 1 a a
这不是列的原始顺序。我想更改字典中各列的顺序。 帮助吗?
答案 0 :(得分:2)
只需添加列名参数。
entity_ids = pd.DataFrame(entity_data, columns=["id","store","marker"])
答案 1 :(得分:2)
OrderedDict
用于有序词典您不应假定已订购字典。虽然字典 在Python 3.7中是按插入顺序排列的,但不应假定在将json读入字典或将字典转换为Pandas数据帧时,库是否保持此顺序
最可靠的解决方案是使用标准库中的collections.OrderedDict
:
import json
import pandas as pd
from collections import OrderedDict
params = """{
"entity_data":[
{"id": 1, "store": "a", "marker": "a"}
]
}"""
# replace myjson with request.json
data = json.loads(params, object_pairs_hook=OrderedDict)
entity_data = data.pop('entity_data')
df = pd.DataFrame(entity_data)
print(df)
# id store marker
# 0 1 a a
答案 2 :(得分:1)
假设您有权访问JSON发送者,则可以在JSON本身中发送订单。
喜欢
`{
"order":['id','store','marker'],
"entity_data":{"id": [1,2], "store": ["a","b"],
"marker": ["a","b"]}
}
然后使用指定的columns
创建DataFrame。正如Chiheb.K。
import pandas as pd
params = request.json
entity_data = params.pop('entity_data')
order = params.pop('order')
entity_df=pd.DataFrame(data,columns=order)
,如果您不能在JSON中明确指定顺序。请参阅this的答案以在中指定object_pairs_hook
JSONDecoder
获取OrderedDict
,然后创建DataFrame