【问题标题】:how do you convert json output to a data frame in python你如何将json输出转换为python中的数据框
【发布时间】:2022-01-12 23:03:04
【问题描述】:

我需要将此json文件转换为python中的数据框:

print(resp2)

    {
  "totalCount": 1,
  "nextPageKey": null,
  "result": [
    {
      "metricId": "builtin:tech.generic.cpu.usage",
      "data": [
        {
          "dimensions": [
            "process_345678"
          ],
          "dimensionMap": {
            "dt.entity.process_group_instance": "process_345678"
          },
          "timestamps": [
            1642021200000,
            1642024800000,
            1642028400000
          ],
          "values": [
            10,
            15,
            12
          ]
        }
      ]
    }
  ]
}

输出需要是这样的:

metricId    dimensions  timestamps  values
builtin:tech.generic.cpu.usage  process_345678  1642021200000   10
builtin:tech.generic.cpu.usage  process_345678  1642024800000   15
builtin:tech.generic.cpu.usage  process_345678  1642028400000   12

我试过这个:

print(pd.json_normalize(resp2, "data"))

我得到了无效的语法,有什么想法吗?

【问题讨论】:

  • create DataFrame from data_list 的语法无效...是代码的一部分吗?
  • 除此之外,在这里查看一些示例pandas.pydata.org/pandas-docs/stable/reference/api/…
  • @OneCricketeer,我试过 pandas 规范化函数,但不起作用
  • 你没有回答我的第一个问题,而且,resp2 包括totalCountdimensionMap,它们不在你的预期输出中,所以显然这是错误的......你在过去的 6 个月中,我们就如何解析 JSON 提出了 3 个类似的问题,那么为了在数据中获取结果列表,然后删除 dimensionMap,您学到了什么?换句话说,您需要先解析数据到一个新列表中,然后才能创建所需的数据框
  • @OneCricketeer,我不熟悉这些东西。而且所有的例子都和这个json文件不相似。

标签: python json


【解决方案1】:

查看json_normalize 的示例,您会看到一个字典列表,其中包含您想要的列的键名,每一行都是唯一的。当您有嵌套列表/对象时,列将被展平以具有点表示法,但嵌套数组最终不会跨行重复。

因此,将数据解析成平面列表,然后可以使用from_records

data = []
for r in resp2['result']:
    metricId = r['metricId']
    for d in r['data']:
        dimension = d['dimensions'][0]  # unclear why this is an array 
        timestamps = d['timestamps']
        values = d['values']
        for t, v in zip(timestamps, values):
            data.append({'metricId': metricId, 'dimensions': dimension,  'timestamps': t, 'values': v})

df = pd.DataFrame.from_records(data)

【讨论】:

    猜你喜欢
    • 2021-05-23
    • 2020-07-15
    • 2017-05-25
    • 2021-07-14
    • 2019-09-23
    • 2017-10-31
    • 1970-01-01
    • 2018-04-18
    • 2020-05-29
    相关资源
    最近更新 更多