我正试图弄清这一点。
我有这个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
如您所见,当行仍按正确顺序排列时,列按字母顺序排序。如何保持列顺序(或恢复列顺序)?
谢谢!
答案 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())]