【问题标题】:Issue with JSON nested values through Python json_normalize通过 Python json_normalize 处理 JSON 嵌套值的问题
【发布时间】:2020-06-22 11:43:44
【问题描述】:

尽管查看了许多示例+解决方案,但我没有找到任何适用于这个特定 JSON 模式的东西。

我有这行来自 API 的 JSON:

x = {'rows': [{'columns':
                 [{'name': 'User ID', 'value': '0000123'},
                 {'name': 'Last Name', 'value': 'Test1'}]},
              {'columns':
                 [{'name': 'User ID', 'value': '0000567'},
                 {'name': 'Last Name', 'value': 'Test2'}]}]}

由于某种原因,我无法使用各种形式的 json_normalize 将其输出,我能得到的最接近的方法是让它们堆叠。

pd.json_normalize(data=x,record_path=['rows',['columns']])

结果:

        name    value
0    User ID  0000123
1  Last Name    Test1
2    User ID  0000567
3  Last Name    Test2

但我正在寻找它来输出:

User ID  Last Name
0000123  Test1
0000567  Test2

我正在研究支点,但没有可用的索引。我可以附加数组值吗? 或者,可能有更好的方法来创建数据框,因此它可以轻松规范化。

帮助表示赞赏。

【问题讨论】:

    标签: python json pivot normalize


    【解决方案1】:

    有人可能有更好的答案,但是如果您检查 json_normalize (link) 的来源,它“目前效率极低”,并且只使用列表理解和循环。因此,通过手动规范化数据,您可能不会损失太多效率。这是一个为清楚起见而编写的示例(即,如果您要检索大型 json,这将不会很好地扩展),它循环您的数据以构建字段:

    normalized_data={'User ID':[],'Last Name':[]}
    for row in x['rows']:
        for column in row['columns']:
            normalized_data[column['name']].append(column['value'])
    
    df=pd.DataFrame(normalized_data)
    print(df)
    

    打印:

       User ID Last Name
    0  0000123     Test1
    1  0000567     Test2
    

    显然不理想,希望看到其他答案,但鉴于 jsons 带有开放式格式,如果你没有足够幸运拥有你的 json,那么很难找到一个开箱即用的 pandas 方法结构与熊猫可以处理的结构相匹配。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-21
      • 2019-02-12
      • 1970-01-01
      • 2021-12-30
      • 2017-09-18
      • 2022-07-10
      • 2020-12-02
      相关资源
      最近更新 更多