[问题] 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