[英]Convert a Pandas Dataframe into a nested json
我需要將pandas Dataframe轉換為嵌套的json。 .to_json的輸出給出以下內容
{"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並有相應的值。 像這樣:
{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()函數無法按照我想要的方式工作,我已經用盡了我所有的選擇。 任何想法如何進行?
編輯:
感謝您的回答! 我將json輸出作為循環的一部分,而我得到的每個輸出都是唯一的JSON。 那么有什么方法可以創建以下內容:
{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是一個唯一的標識符,我將在循環結束時傳遞它。
將set_index
+ to_json
與參數orient
:
df.set_index('Guest').to_json('file.json', orient='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}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.