数据帧到嵌套JSON

2024-04-23 21:52:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我不熟悉JSON格式的文件。

我有一个熊猫数据帧:

import pandas as pd

df = pd.DataFrame([["A", "2014/01/01", "2014/01/02", "A", -0.0061, "A"],
                   ["A", "2015/07/11", "2015/08/21", "A", 1.50, "A"],
                   ["C", "2016/01/01", "2016/01/05", "U", 2.75, "R"],
                   ["D", "2013/05/19", "2014/09/30", "Q", -100.0, "N"],
                   ["B", "2015/08/22", "2015/09/01", "T", 10.0, "R"]],
                   columns=["P", "Start", "End", "Category", "Value", "Group"]
                 ) 

看起来像这样

^{pr2}$

我知道我可以通过以下方式将其转换为JSON:

df.to_json("output.json")

但我需要将其转换为如下所示的嵌套JSON格式:

{
  "group_list": [
    {
      "category_list": [
        {
          "category": "A",
          "p_list": [
            {
              "p": "A",
              "date_list": [
                {
                  "start": "2014/01/01",
                  "end": "2014/01/02",
                  "value": "-0.0061"
                }
              ]
            },
            {
              "p": "A",
              "date_list": [
                {
                  "start": "2015/07/11",
                  "end": "2015/08/21",
                  "value": "1.5000"
                }
              ]
            }
          ]
        }
      ],
      "group": "A"
    },
    {
      "category_list": [
        {
          "category": "U",
          "p_list": [
            {
              "p": "C",
              "date_list": [
                {
                  "start": "2016/01/01",
                  "end": "2016/01/05",
                  "value": "2.7500"
                }
              ]
            }
          ]
        },
        {
          "category": "T",
          "p_list": [
            {
              "p": "B",
              "date_list": [
                {
                  "start": "2015/08/22",
                  "end": "2015/09/01",
                  "value": "10.000"
                }
              ]
            }
          ]
        }
      ],
      "group": "R"
    },
    {
      "category_list": [
        {
          "category": "Q",
          "p_list": [
            {
              "p": "D",
              "date_list": [
                {
                  "start": "2013/05/19",
                  "end": "2014/09/30",
                  "value": "-100.0000"
                }
              ]
            }
          ]
        }
      ],
      "group": "N"
    }
  ]
}

我考虑过使用Pandas的groupby功能,但我不太明白如何才能将其转换为最终的JSON格式。从本质上讲,嵌套开始于将具有相同“group”和“category”列的行分组。然后,就是列出行。我可以用嵌套的for循环编写一些代码,但我希望有一种更有效的方法来实现这一点。在

更新

我还可以通过以下方式操作数据帧:

df2 = df.set_index(['Group', 'Category', 'P']).stack()

Group  Category  P       
    A      A         A  Start    2014/01/01
                        End      2014/01/02
                        Value       -0.0061
                        Start    2015/07/11
                        End      2015/08/21
                        Value           1.5
    R      U         C  Start    2016/01/01
                        End      2016/01/05
                        Value          2.75
    N      Q         D  Start    2013/05/19
                        End      2014/09/30
                        Value          -100
    R      T         B  Start    2015/08/22
                        End      2015/09/01
                        Value            10

这很接近我需要的位置,但我不认为在这种情况下可以调用df2.to_json()。在


Tags: jsondfdatevalue格式groupstartlist
1条回答
网友
1楼 · 发布于 2024-04-23 21:52:09

下面的嵌套循环应该可以让您非常接近:

import json
from json import dumps

json_dict = {}
json_dict['group_list'] = []
for grp, grp_data in df.groupby('Group'):
    grp_dict = {}
    grp_dict['group'] = grp
    for cat, cat_data in grp_data.groupby('Category'):
        grp_dict['category_list'] = []
        cat_dict = {}
        cat_dict['category'] = cat
        cat_dict['p_list'] = []
        for p, p_data in cat_data.groupby('P'):
            p_data = p_data.drop(['Category', 'Group'], axis=1).set_index('P')
            for d in p_data.to_dict(orient='records'):
                cat_dict['p_list'].append({'p': p, 'date_list': [d]})
        grp_dict['category_list'].append(cat_dict)
    json_dict['group_list'].append(grp_dict)
json_out = dumps(json_dict)
parsed = json.loads(json_out)

导致:

^{pr2}$

相关问题 更多 >