首页 > 解决方案 > 将 Dataframe 转换为特定的 json 格式

问题描述

我需要将此数据框转换为下面的 json 格式,但无法正常工作

conv_item_id 更新项目值 order_check
一个 1.99 得到正式认可的
b 2.99 得到正式认可的
C 2.99 得到正式认可的
{
   "conversion_items":{
      "a":{
        "item_value":1.99,
        "status":"approved"
    },
      "b":{
        "item_value":2.99,
        "status":"approved"
    },
      "c":{
        "item_value":2.99,
        "status":"approved"
    }
  }
}

我目前有这个将数据帧转换为字符串的函数

# build all our requests
def build_request(row):   
    return {
        row["conv_item_id"]: {
                "item_value": row["updated_item_value"],
                "status" : str.lower(row["order_check"])
            }
        }

request_payload = df.apply(build_request, axis=1).to_json(orient='records')[1:-1].replace('}{', '} {')

df2 = {"conversion_items": request_payload}

以字符串形式给出以下结果

{'conversion_items': '{"a":{"item_value":1.99,"status":"approved"}},{"b":{"item_value":2.99,"status":"approved"}},{"c":{"item_value":2.99,"status":"approved"}}'}

我需要的格式是

{'conversion_items': {"a":{"item_value":1.99,"status":"approved"},"b":{"item_value":2.99,"status":"approved"},"c":{"item_value":2.99,"status":"approved"}}

有谁知道如何做到这一点?我尝试使用 strip 和 replace 但它要么只删除最后一个 } 要么全部删除。

提前致谢,

标签: pythonjsonformat

解决方案


示例 df:

import pandas as pd
df = pd.DataFrame({"conv_item_id":["a","b","c"],"updated_item_value":[1.99,2.99,2.99],"order_check":["approved"]*3})
  • 使用将索引设置为 conv_item_iddf.set_index()
  • 使用重命名列名df.rename()
  • 使用索引将 df 转换为 dict 作为键df.to_dict("index")
  • 将dict转储到json使用json.dumps()
import json
df = df.set_index("conv_item_id")
df = df.rename(columns={"updated_item_value":"item_value","order_check":"status"})
out = json.dumps({"conversion_items": df.to_dict("index")})
print(out)

>> {'conversion_items': {'a': {'item_value': 1.99, 'status': 'approved'},
  'b': {'item_value': 2.99, 'status': 'approved'},
  'c': {'item_value': 2.99, 'status': 'approved'}}}

推荐阅读