熊猫改变列的顺序

时间:2018-12-25 09:27:04

标签: python pandas dictionary dataframe

在我的项目中,我使用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

这不是列的原始顺序。我想更改字典中各列的顺序。 帮助吗?

3 个答案:

答案 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