簡體   English   中英

pandas改變了列的順序

[英]pandas change the order of columns

在我的項目中,我正在使用燒瓶,我得到一個JSON(通過REST API),其中包含我應該轉換為pandas Dataframe的數據。 JSON看起來像:

{
    "entity_data":[
                  {"id": 1, "store": "a", "marker": "a"}
    ]
}

我得到JSON並提取數據:

params = request.json
entity_data = params.pop('entity_data')

然后我將數據轉換為pandas數據幀:

entity_ids = pd.DataFrame(entity_data)

結果如下:

   id marker store
0   1      a     a

這不是列的原始順序。 我想像字典中那樣更改列的順序。 救命?

只需添加列名參數即可。

entity_ids = pd.DataFrame(entity_data, columns=["id","store","marker"])

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

假設您有權訪問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中明確指定順序。 看到這個答案在JSONDecoder指定object_pairs_hook以獲取OrderedDict ,然后創建DataFrame

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM