将JSON加载到Pandas数据框时保留列顺序

时间:2019-04-03 09:18:15

标签: python json pandas

我正试图弄清这一点。

我有这个JSON文件:

[
 {
   "id": 1,
   "Z": "a",
   "C": "z",
   "D": "text"
 },
 {
   "id": 2,
   "Z": "b",
   "C": "y",
   "D": "text"
 },
 {
   "id": 3,
   "Z": "c",
   "C": "x",
   "D": "text"
 }
]

对于行和列,数据的顺序是有意义的,需要保留。我需要将其加载到数据框。因此,发生的事情是这样:

In [1]: import json

In [2]: from pandas.io.json import json_normalize

In [3]: with open('test.json') as f:
   ...:     json_data = json.load(f)
   ...:

In [4]: json_data
Out[4]:
[{'id': 1, 'Z': 'a', 'C': 'z', 'D': 'text'},
 {'id': 2, 'Z': 'b', 'C': 'y', 'D': 'text'},
 {'id': 3, 'Z': 'c', 'C': 'x', 'D': 'text'}]

In [5]: df = json_normalize(json_data)

In [6]: df
Out[6]:
   C     D  Z  id
0  z  text  a   1
1  y  text  b   2
2  x  text  c   3

如您所见,当行仍按正确顺序排列时,列按字母顺序排序。如何保持列顺序(或恢复列顺序)?

谢谢!

2 个答案:

答案 0 :(得分:2)

您可以reindex列出字典中第一个元素的键的列(假设第一个元素的键以所需的顺序排列):

df = df.reindex(columns=list(json_data[0].keys()))

print(df)

输出:

   id  Z  C     D
0   1  a  z  text
1   2  b  y  text
2   3  c  x  text

答案 1 :(得分:2)

使用此:

df = df[list(json_data[0].keys())]