将 Dataframe 转换为特定的 json 格式

Converting a Dataframe into a specific json format

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

conv_item_id updated_item_value 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"}}

有人知道怎么做吗?我尝试使用剥离和替换,但它要么只删除最后一个 } 要么全部删除。

提前致谢,

示例 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})
  • 使用 df.set_index()
  • 将索引设置为 conv_item_id
  • 使用 df.rename()
  • 重命名列名称
  • 使用 df.to_dict("index")
  • 将 df 转换为以索引为键的字典
  • 使用json.dumps()
  • 将字典转储到json
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'}}}

反转你的数据帧并获得 to_dict() 方法:

import pandas as pd

dict_test = {
   "conversion_items":{
      "a":{
        "item_value":1.99,
        "status":"approved"
    },
      "b":{
        "item_value":2.99,
        "status":"approved"
    },
      "c":{
        "item_value":2.99,
        "status":"approved"
    }
  }
}
df = pd.DataFrame(dict_test['conversion_items'])
df = df.T
print(df)
conv_item_id updated_item_value order_check
a 1.99 approved
b 2.99 approved
c 2.99 approved

现在获取转置数据帧上的 to_dict() 方法:

{'conversion_items':df.T.to_dict()}
{
   "conversion_items":{
      "a":{
        "item_value":1.99,
        "status":"approved"
    },
      "b":{
        "item_value":2.99,
        "status":"approved"
    },
      "c":{
        "item_value":2.99,
        "status":"approved"
    }
  }
}