将Pandas Dataframe转换为嵌套的json [英] Convert a Pandas Dataframe into a nested json

查看:260
本文介绍了将Pandas Dataframe转换为嵌套的json的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要将pandas Dataframe转换为嵌套的json. .to_json的输出给出以下内容

I need to convert pandas Dataframe into nested json. The output of .to_json gives the following

{"Annual Expenditure":{"0":250,"1":250},"Annual Frequency":{"0":1,"1":1},"Avg days":{"0":null,"1":null},"First visit":{"0":1449100800000,"1":1490054400000},"Frequency":{"0":1,"1":1},"Guest":{"0":25642,"1":55521},"Last visit":{"0":1449100800000,"1":1490054400000},"Monetory":{"0":250,"1":250},"Recency":{"0":701,"1":227},"Visit_Ids":{"0":[80611],"1":[342104]},"RFMClass":{"0":"444","1":"144"},"AvgLTV":{"0":13305.7692307692,"1":13305.7692307692}}

但是我需要在嵌套的json中将key作为guest_id并有相应的值.像这样:

But I need in a nested json with key as the guest_id and there corresponding values. Something like this:

{55521: {'Monetory': 250, 'First visit': datetime.date(2017, 3, 21), 'Annual Expenditure': 250, 'Frequency': 1, 'Last visit': datetime.date(2017, 3, 21), 'Avg days': NaT, 'Annual Frequency': 1, 'Recency': 227, 'Visit_Ids': [342104]}, 25642: {'Monetory': 250, 'First visit': datetime.date(2015, 12, 3), 'Annual Expenditure': 250, 'Frequency': 1, 'Last visit': datetime.date(2015, 12, 3), 'Avg days': NaT, 'Annual Frequency': 1, 'Recency': 701, 'Visit_Ids': [80611]}}

.to_json()函数无法按我想要的方式工作,我已经用尽了我所有的选择.任何想法如何进行?

The .to_json() function doesn't work the way I want it and I have pretty much exhausted all my options on this. Any Idea how to proceed ?

感谢您的回答!我将json输出作为循环的一部分,而我得到的每个输出都是一个唯一的JSON.那么有什么方法可以创建以下内容?:

Thanks for the answer! I'm getting json outputs as part of a loop, and each output I get is a unique JSON. So is there a way to create the following ?:

{45: {"50492":{"Annual Expenditure":1000,"Annual Frequency":1,"Avg days":null,"First visit":1486339200000,"Frequency":1,"Last visit":1486339200000,"Merchants":45,"Monetory":1000,"Recency":270,"Visit_Ids":[300758],"RFMClass":"144","AvgLTV":113800.0},"1041":{"Annual Expenditure":1000,"Annual Frequency":1,"Avg days":null,"First visit":1478649600000,"Frequency":1,"Last visit":1478649600000,"Merchants":45,"Monetory":1000,"Recency":359,"Visit_Ids":[257022],"RFMClass":"244","AvgLTV":113800.0},"783":{"Annual Expenditure":1000,"Annual Frequency":1,"Avg days":null,"First visit":1457049600000,"Frequency":1,"Last visit":1457049600000,"Merchants":45,"Monetory":1000,"Recency":609,"Visit_Ids":[123464],"RFMClass":"444","AvgLTV":113800.0}}}

这里的45是一个唯一的标识符,我将在循环结束时传递它.

Here the 45 is a unique identifier that I'll pass in at the end of the loop.

推荐答案

使用 set_index +


{
    "25642": {
        "Annual Expenditure": 250,
        "Annual Frequency": 1,
        "Avg days": null,
        "AvgLTV": 13305.7692307692,
        "First visit": 1449100800000,
        "Frequency": 1,
        "Last visit": 1449100800000,
        "Monetory": 250,
        "RFMClass": "444",
        "Recency": 701,
        "Visit_Ids": [80611]
    },
    "55521": {
        "Annual Expenditure": 250,
        "Annual Frequency": 1,
        "Avg days": null,
        "AvgLTV": 13305.7692307692,
        "First visit": 1490054400000,
        "Frequency": 1,
        "Last visit": 1490054400000,
        "Monetory": 250,
        "RFMClass": "144",
        "Recency": 227,
        "Visit_Ids": [342104]
    }
}

输入DataFrame:

d = {"Annual Expenditure":{"0":250,"1":250},"Annual Frequency":{"0":1,"1":1},"Avg days":{"0":np.nan,"1":np.nan},"First visit":{"0":1449100800000,"1":1490054400000},"Frequency":{"0":1,"1":1},"Guest":{"0":25642,"1":55521},"Last visit":{"0":1449100800000,"1":1490054400000},"Monetory":{"0":250,"1":250},"Recency":{"0":701,"1":227},"Visit_Ids":{"0":[80611],"1":[342104]},"RFMClass":{"0":"444","1":"144"},"AvgLTV":{"0":13305.7692307692,"1":13305.7692307692}}


df = pd.DataFrame(d)
print (df)
   Annual Expenditure  Annual Frequency  Avg days        AvgLTV  \
0                 250                 1       NaN  13305.769231   
1                 250                 1       NaN  13305.769231   

     First visit  Frequency  Guest     Last visit  Monetory RFMClass  Recency  \
0  1449100800000          1  25642  1449100800000       250      444      701   
1  1490054400000          1  55521  1490054400000       250      144      227   

  Visit_Ids  
0   [80611]  
1  [342104] 

j = df.set_index('Guest').to_json(orient='index')
j_final = {45: j}

这篇关于将Pandas Dataframe转换为嵌套的json的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆