如何将此嵌套的 JSON 以柱状形式转换为 Pandas 数据框

Posted

技术标签:

【中文标题】如何将此嵌套的 JSON 以柱状形式转换为 Pandas 数据框【英文标题】:how to convert this nested JSON in columnar form into Pandas dataframe 【发布时间】:2015-04-03 21:02:29 【问题描述】:

我可以将这种列式格式的嵌套 JSON 格式读入 pandas。

JSON Scheme

JSON 方案格式

Python 脚本

    req = requests.get(REQUEST_API)
    returned_data = json.loads(req.text)
    # status
    print("status: 0".format(returned_data["status"]))
    # api version
    print("version: 0".format(returned_data["version"]))
    data_in_columnar_form = pd.DataFrame(returned_data["data"])
    data = data_in_columnar_form["data"]

更新

我想把下面的JSON方案转换成表格格式作为表格,怎么做?

JSON 方案

     "data":[  
          
           "year":"2009",
           "values":[  
                
                 "Actual":"(0.2)"
              ,
                
                 "Upper End of Range":"-"
              ,
                
                 "Upper End of Central Tendency":"-"
              ,
                
                 "Lower End of Central Tendency":"-"
              ,
                
                 "Lower End of Range":"-"
              
           ]
        ,
          
           "year":"2010",
           "values":[  
                
                 "Actual":"2.8"
              ,
                
                 "Upper End of Range":"-"
              ,
                
                 "Upper End of Central Tendency":"-"
              ,
                
                 "Lower End of Central Tendency":"-"
              ,
                
                 "Lower End of Range":"-"
              
           ]
        ,...
        ]

【问题讨论】:

也许这就是您要找的东西? Construct pandas DataFrame from items in nested dictionary 【参考方案1】:

Pandas 有一个 JSON normalization 函数(从 0.13 开始),直接来自文档:

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

In [206]: data = ['state': 'Florida',
   .....:           'shortname': 'FL',
   .....:           'info': 
   .....:                'governor': 'Rick Scott'
   .....:           ,
   .....:           'counties': ['name': 'Dade', 'population': 12345,
   .....:                       'name': 'Broward', 'population': 40000,
   .....:                       'name': 'Palm Beach', 'population': 60000],
   .....:          'state': 'Ohio',
   .....:           'shortname': 'OH',
   .....:           'info': 
   .....:                'governor': 'John Kasich'
   .....:           ,
   .....:           'counties': ['name': 'Summit', 'population': 1234,
   .....:                        'name': 'Cuyahoga', 'population': 1337]]
   .....: 

In [207]: json_normalize(data, 'counties', ['state', 'shortname', ['info', 'governor']])
Out[207]: 
         name  population info.governor    state shortname
0        Dade       12345    Rick Scott  Florida        FL
1     Broward       40000    Rick Scott  Florida        FL
2  Palm Beach       60000    Rick Scott  Florida        FL
3      Summit        1234   John Kasich     Ohio        OH
4    Cuyahoga        1337   John Kasich     Ohio        OH

【讨论】:

我总是忘记它的存在,所以我重新实现了几次。 :-( @DSM 我也是...公平地说,它是“最近的”。 :) @AndyHayden 谢谢你的回复,你能给我一些新问题的提示吗***.com/questions/28335321/… @Andy Hayden 如果'counties''info' 的孩子怎么办?元数据会是什么?我仍在测试以解析 'info':['counties'] 值。

以上是关于如何将此嵌套的 JSON 以柱状形式转换为 Pandas 数据框的主要内容,如果未能解决你的问题,请参考以下文章

如何将此 JSON 转换为 DataFrame?

从 Python 编写嵌套拼花格式

如何将此 Informix 嵌套联接转换为 tsql 嵌套联接?

如何使用 jq 将此嵌套对象转换为扁平对象?

将 Tweepy 状态对象转换为 JSON

如何在javascript中将嵌套对象转换为对象数组? [关闭]