将 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"
}
}
}
我需要将此数据帧转换为下面的 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"
}
}
}