[問題] json 與 dataframe 互轉排序問題

作者: m87dd05 (八八里阿巴)   2017-11-28 15:47:22
我有一個 csv 檔,
使用 json 轉換後再轉換回來後發現它會自動幫我把行列做排序,
但是我想維持原本的欄位順序,
請問我該怎麼處理?
https://imgur.com/a/0KTnp
附圖最左為我原始csv檔案,中跟右為轉換後行列排序被打亂的csv
(希望轉換過後重新輸出的csv還是能跟最左一樣)
以下為我的 code:
import json
import pandas
from pandas.io.json import json_normalize
dataFrame_Price = pandas.read_csv(r"C:\price.csv")
dataFrame_Price = dataFrame_Price.set_index("ItemName")
Jstr_Price = dataFrame_Price.to_json()
data = pandas.read_json(Jstr_Price)
data.to_csv(r"Result.csv")
print data
作者: TitanEric (泰坦)   2017-11-28 15:56:00
純粹問一下 為什麼欄位順序這麼重要? csv或json其實都可以用dict方式load進來讀值 尤其你有column name 更方便
作者: m87dd05 (八八里阿巴)   2017-11-28 16:19:00
我只是好奇為什麼順序會被打亂,是因為它有預設什麼參數我不知道的嗎?另外T大可以請教你用 column name 的方法是是指什麼意思嗎?因為我現在的方法是為了要把很多個像這樣的csv檔,傳到一個空間,但是此空間只接受字串,所以我想說那我把一個一個csv用 json 去轉再存入 dict後再次用json去把dict轉換再上傳,之後如果需要用時就再把它下載下來轉回原本的型態
作者: f496328mm (為什麼會流淚)   2017-11-28 16:53:00
我印象中,欄位是按照a-z去自動排的,可以再下指令讓欄位順序變成你要的
作者: TitanEric (泰坦)   2017-11-28 17:25:00
我有個想法是 直接將csv的每個row直接轉成字串 可以嗎? 這樣就可以保留順序csv有column name的好處是可以直接用csv裡面的DictReader讀檔 就可以直接用類似row["name"]的方式讀那個row的column值
作者: BigBank ( )   2017-11-28 21:05:00
json存成dict的話,dict本身就不保證順序,因此會亂
作者: TitanEric (泰坦)   2017-11-29 08:47:00
樓上沒錯 經hash過不保證保留順序
作者: m87dd05 (八八里阿巴)   2017-11-29 09:02:00
但我現在僅是dataframe轉json再轉回dataframe順序還是被打亂說(還沒用dict)
作者: Sunal (SSSSSSSSSSSSSSSSSSSSSSS)   2017-11-29 09:22:00
json只是個格式而以 進到pandas還是會被轉成dict再存到DataFramejson只是個text的格式而已但是dataframe會做排序 用字串排吧 忘了http://bit.ly/2AJ1utk 可以看這
作者: m87dd05 (八八里阿巴)   2017-11-29 11:55:00
感謝S大,此方法針對單一csv可行,但是如果是針對dict似似乎就不行了,JSON data had unexpected key(s)少轉一次json,感謝大家,感謝S大

Links booklink

Contact Us: admin [ a t ] ucptt.com