[英]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.