是否存在用于从DF创建嵌套JSON文件的python函数?

时间:2019-06-07 15:56:11

标签: json pandas dataframe nested

我正在尝试从最终JSON文件应具有的架构开始构建数据框。

架构如下:

[{"plant": ,
  "at": ,
  "products": [{
          "product": ,
          "quantity": ,
      }]

植物应为字符串,日期应为ISO8601,产品应为字符串,数量应为整数。

我按如下所示构建了数据框:

Plant    At         Products    Product    Quantity
XXX    2019-06-07   products    product1     4
YYY    2019-06-07   products    product2     -9
ZZZ    2019-06-07   products    product3     2099

现在我正在尝试生成嵌套的JSON文件,但是我使用的代码无法按需工作

j2 = (df2.groupby(['plant', 'at'], as_index=False)
    .apply(lambda x: x[['product', 'quantity']].to_dict('r'))
    .reset_index()
    .rename(columns={0: 'products'})
    .to_json(orient='columns'))

我得到了这个JSON

{"plant":{"0":"XXX","1":"YYY","2":"ZZZ"},"at":{"0":"2019-06-07 12:53:13.983775","1":"2019-06-07 12:53:13.983775","2":"2019-06-07 12:53:13.983775"},"products":{"0":[{"product":product1,"quantity":4}],"1":[{"product":product2,"quantity":-9}],"2":[{"product":product3,"quantity":2099}]}}

但这实际上不是我应该生成的格式。

有什么建议吗?有没有办法保留日期的ISO8601格式?

1 个答案:

答案 0 :(得分:0)

使用orient ='records'

df2.groupby(['Plant', 'At'])['Product', 'Quantity'].apply(lambda x: x.to_dict('r')).reset_index(name = 'Products').to_json(orient = 'records')

您得到

[{"Plant":"XXX",
"At":"2019-05-03",
"Products":[{"Product":"Product1","Quantity":4}]}]