使用Python将多个关系表转换为嵌套JSON格式

时间:2018-11-28 13:36:27

标签: python json pandas nested

我正在尝试通过使用python / pandas组合多个关系表来创建嵌套的JSON对象。我是Python /熊猫的初学者,所以在这里寻求帮助...

在下面的示例中,为了保持简单起见,我使用的是CSV文件而不是表格

  

Table1.csv

     

Emp_id,性别,年龄
  1,M,32
  2,M,35
  3,F,31

     

Table2.csv

     

Emp_id,月,奖励
  3000年8月1日
  3500年9月1日
  2000年10月1日
  1500年8月2日
  5000年8月3日
  2400年9月3日

我想创建如下的JSON对象

  

*必填输出:

{
    "data": [{
        "employee": 1,
        "gender": M,
        "age": 32,
        "incentive": [{
            "aug": 3000,
            "sep": 3500,
            "oct": 2000
        }],
        "employee": 2,
        "gender": M,
        "age": 35,
        "incentive": [{
            "aug": 1500
        }],
        "employee": 3,
        "gender": F,
        "age": 31,
        "incentive": [{
            "aug": 5000,
            "sep": 2400
        }]
    }]
}

1 个答案:

答案 0 :(得分:1)

首先将merge与左连接一起使用,然后将groupby与lambda函数一起用于字典并转换to_dict,最后加上最高的key值并转换为json

d = (df1.merge(df2, on='Emp_id', how='left')
         .groupby(['Emp_id','Gender','Age'])['Month','Incentive']
         .apply(lambda x: [dict(x.values)])
         .reset_index(name='Incentive')
         .to_dict(orient='records')

)
#print (d)

import json
json = json.dumps({'data':d})

print (json)

{
    "data": [{
        "Emp_id": 1,
        "Gender": "M",
        "Age": 32,
        "Incentive": [{
            "Aug": 3000,
            "Sep": 3500,
            "Oct": 2000
        }]
    }, {
        "Emp_id": 2,
        "Gender": "M",
        "Age": 35,
        "Incentive": [{
            "Aug": 1500
        }]
    }, {
        "Emp_id": 3,
        "Gender": "F",
        "Age": 31,
        "Incentive": [{
            "Aug": 5000,
            "Sep": 2400
        }]
    }]
}