【发布时间】:2017-09-20 04:57:19
【问题描述】:
当使用 to_json 将数据存储在 json 对象中并使用 read_json 读回时,行和列按字母顺序返回。有没有办法在检索时保持结果有序或重新排序?
【问题讨论】:
当使用 to_json 将数据存储在 json 对象中并使用 read_json 读回时,行和列按字母顺序返回。有没有办法在检索时保持结果有序或重新排序?
【问题讨论】:
【讨论】:
如果你想用“orient='records'”创建一个格式并保持列的顺序,试着做一个这样的函数。我不认为这是一个明智的做法,也不推荐,因为它不能保证它的顺序。
def df_to_json(df):
res_arr = []
ldf = df.copy()
ldf=ldf.fillna('')
lcolumns = [ldf.index.name] + list(ldf.columns)
for key, value in ldf.iterrows():
lvalues = [key] + list(value)
res_arr.append(dict(zip(lcolumns, lvalues)))
return json.dumps(res_arr)
另外,对于没有排序列的阅读,请参考这个[链接](Python json.loads changes the order of the object)
祝你好运
【讨论】:
您可以使用orient='split',它将索引和列信息存储在列表中,从而保持顺序:
In [34]: df
Out[34]:
A C B
5 0 1 2
4 3 4 5
3 6 7 8
In [35]: df.to_json(orient='split')
Out[35]: '{"columns":["A","C","B"],"index":[5,4,3],"data":[[0,1,2],[3,4,5],[6,7,8]]}'
In [36]: pd.read_json(df.to_json(orient='split'), orient='split')
Out[36]:
A C B
5 0 1 2
4 3 4 5
3 6 7 8
记得在阅读时也使用orient='split',否则你会得到
In [37]: pd.read_json(df.to_json(orient='split'))
Out[37]:
columns data index
0 A [0, 1, 2] 5
1 C [3, 4, 5] 4
2 B [6, 7, 8] 3
【讨论】:
read_json()之后手动设置dtypes,像这样df['date_operation'] = df['date_operation'].astype('datetime64[ms]') . This convert default milliseconds produced by df.to_json()`