python - 将 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 但它要么只删除最后一个 } 要么全部删除。
提前致谢,
解决方案
示例 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_id
df.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'}}}
推荐阅读
- node.js - 在 sequelize.js 中使用包含时如何将所有列放在一行中?
- android - 无法解析方法 io()
- sql - 在 Oracle SQL 中获取 rownum = 1 但不是 1 的数据
- python - PIL , im.getdata() 返回整数而不是元组
- php - 保存文本文件超过 8kb(80 行) fwrite php
- android - Exoplayer - 多次调用 seekTo 时显示预览
- c++ - 在 C++ 中,是否可以将 CRTP 与私有基础一起使用?
- spring - 如何加密整个文件?
- git - 如何使用 .gitignore 反向选择
- algorithm - 在 Scala 中实现成对线性距离