Mantenga el orden de las columnas y las filas al almacenar el dataframe de pandas en json

Cuando se almacenan datos en un objeto json con to_json y se leen con read_json, las filas y columnas se devuelven ordenadas alfabéticamente. ¿Hay una manera de mantener los resultados ordenados o reordenarlos al recuperarlos?

Podría usar orient='split' , que almacena el índice y la información de la columna en listas, que conservan el orden:

 In [34]: df Out[34]: ACB 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]: ACB 5 0 1 2 4 3 4 5 3 6 7 8 

Solo recuerda usar orient='split' en la lectura, o obtendrás

 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 

Si desea crear un formato con “orientar = ‘registros'” y mantener los órdenes de la columna, intente realizar una función como esta. No creo que sea un enfoque sabio, y no lo recomiendo porque no garantiza su orden.

 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) 

Además, para leer sin columna ordenada, ref. Este [enlace] ( Python json.loads cambia el orden del objeto )

Buena suerte