【问题标题】:Retain column order when loading JSON to Pandas dataframe将 JSON 加载到 Pandas 数据框时保留列顺序
【发布时间】:2019-08-24 18:23:22
【问题描述】:

我正在尝试理解这一点。

我有这个 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

如您所见,虽然行的顺序仍然正确,但列按字母顺序排序。如何保持我的列顺序(或恢复它)?

谢谢!

【问题讨论】:

    标签: python json pandas


    【解决方案1】:

    您可以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
    

    【讨论】:

      【解决方案2】:

      使用这个:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-03-16
        • 2016-06-08
        • 1970-01-01
        • 2021-02-09
        • 1970-01-01
        • 2021-05-15
        • 2021-07-16
        • 2014-09-28
        相关资源
        最近更新 更多