亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將熊貓數據框轉換為 JSON 對象列

將熊貓數據框轉換為 JSON 對象列

一只名叫tom的貓 2022-10-06 16:08:13
我有一個熊貓數據框,其中包含有關具有多個訂單的用戶的信息,并且在每個訂單中都有多個商品購買。數據框格式示例:user_id | order_num | item_id | item_desc     1        1         1         red    1        1         2         blue    1        1         3         green我想將它轉換為列中的 JSONb 對象,以便我可以在 postgresql 中查詢它。目前我正在使用以下代碼:j = (reg_test.groupby(['user_id', 'order_num'], as_index=False)             .apply(lambda x: x[['item_id','item_desc']].to_dict('r'))             .reset_index()             .rename(columns={0:'New-Data'})             .to_json(orient='records'))這是我得到的結果:'''[          {            "New-Data": [              {                "item_id": "1",                "item_desc": "red",              },              {                "item_id": "2",                "item_desc": "blue",              },              {                "item_id": "3",                "item_desc": "green",              }            ],            "order_number": "1",            "user_id": "1"          }        ]'''雖然這是正確的 json 格式,但我希望結果如下所示:'''[  {    "New-Data": [{"1":      {        "item_id": "1",        "item_desc": "red",      },"2": {        "item_id": "2",        "item_desc": "blue",      },"3":      {        "item_id": "3",        "item_desc": "green",      }     }    ],    "order_number": "1",    "user_id": "1"  }]'''
查看完整描述

2 回答

?
幕布斯6054654

TA貢獻1876條經驗 獲得超7個贊

作為@rpanai 解決方案的替代方案,我將處理轉移到 vanilla python 中:


將數據幀轉換為 dict :


M = df.to_dict("records")

為項目創建字典


items = [

         {key: value 

         for key, value in entry.items() 

         if key not in ("user_id", "order_num")}

         for entry in M

        ]

item_details = [{str(num + 1): entry}

                for num, entry

                in enumerate(items)]


print(item_details)


[{'1': {'item_id': 1, 'item_desc': 'red'}},

 {'2': {'item_id': 2, 'item_desc': 'blue'}},

 {'3': {'item_id': 3, 'item_desc': 'green'}}]

初始化dict并添加剩余數據


d = dict()

d['New-Data'] = item_details


d['order_number'] = M[0]['order_num']

d['user_id'] = M[0]['user_id']


wrapper = [d]


print(wrapper)


[{'New-Data': [{'1': {'item_id': 1, 'item_desc': 'red'}},

   {'2': {'item_id': 2, 'item_desc': 'blue'}},

   {'3': {'item_id': 3, 'item_desc': 'green'}}],

  'order_number': 1,

  'user_id': 1}]


查看完整回答
反對 回復 2022-10-06
?
ibeautiful

TA貢獻1993條經驗 獲得超6個贊

您是否考慮過使用自定義功能


import pandas as pd


df = pd.DataFrame({'user_id': {0: 1, 1: 1, 2: 1},

 'order_num': {0: 1, 1: 1, 2: 1},

 'item_id': {0: 1, 1: 2, 2: 3},

 'item_desc': {0: 'red', 1: 'blue', 2: 'green'}})


out = df.groupby(['user_id', 'order_num'])[["item_id", "item_desc"]]\

        .apply(lambda x: x.to_dict("records"))\

        .apply(lambda x: [{str(l["item_id"]):l for l in x}])\

        .reset_index(name="New-Data")\

        .to_dict("records")

在哪里out返回


[{'user_id': 1,

  'order_num': 1,

  'New-Data': [{'1': {'item_id': 1, 'item_desc': 'red'},

    '2': {'item_id': 2, 'item_desc': 'blue'},

    '3': {'item_id': 3, 'item_desc': 'green'}}]}]


查看完整回答
反對 回復 2022-10-06
  • 2 回答
  • 0 關注
  • 184 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號