以Dataframe作为值的字典的JSON格式

2024-04-23 06:51:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要从web框架(例如Flask)返回单个Json对象中的几个数据帧和一个字符串。我的代码如下所示:

import pandas as pd
data1 = [['Alex',10],['Bob',12],['Clarke',13]]
df1 = pd.DataFrame(data1,columns=['Name','Age'])
data2 = [['Cycle',5],['Run',1],['Hike',7]]
df2 = pd.DataFrame(data1,columns=['Sport','Duration'])

test_value={}
test_value["df1"] = df1.to_json(orient='records')
test_value["df2"] = df2.to_json(orient='records')
print(json.dumps(test_value))

这将产生:

{"df1": "[{\"Name\":\"Alex\",\"Age\":10},{\"Name\":\"Bob\",\"Age\":12},{\"Name\":\"Clarke\",\"Age\":13}]", "df2": "[{\"Sport\":\"Alex\",\"Duration\":10},{\"Sport\":\"Bob\",\"Duration\":12},{\"Sport\":\"Clarke\",\"Duration\":13}]"}

因此,在“df1”和“df2”值的每个键前面都有许多转义字符。另一方面,如果我查看test_value,我会得到:

{'df1': '[{"Name":"Alex","Age":10},{"Name":"Bob","Age":12},{"Name":"Clarke","Age":13}]', 'df2': '[{"Sport":"Alex","Duration":10},{"Sport":"Bob","Duration":12},{"Sport":"Clarke","Duration":13}]'}

这并不完全正确。我需要的是'df1'用双引号“df1”。除了在字符串中执行搜索和替换之外,实现这一点的方法是什么

我甚至试着自己创建字符串,这样做:

print('\{"test": "{0:.2f}"\}'.format(123))

但我得到了这个错误:

---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-266-1fa35152436c> in <module>
----> 1 print('\{"test": "{0:.2f}"\}'.format(123))

KeyError: '"test"'

我真的不明白:)。也就是说,必须有更好的方法来搜索/替换“df1”中的“df1”

想法


Tags: 字符串nametestjsonagevaluepdbob
1条回答
网友
1楼 · 发布于 2024-04-23 06:51:41

to_jsonjson.dumps函数中,存在到json的双重转换。解决方案是通过^{}将值转换为字典,然后通过json.dumps将值转换为json一次:

test_value={}
test_value["df1"] = df1.to_dict(orient='records')
test_value["df2"] = df2.to_dict(orient='records')
print(json.dumps(test_value))
{"df1": [{"Name": "Alex", "Age": 10}, 
         {"Name": "Bob", "Age": 12}, 
         {"Name": "Clarke", "Age": 13}], 
"df2": [{"Sport": "Alex", "Duration": 10}, 
        {"Sport": "Bob", "Duration": 12}, 
        {"Sport": "Clarke", "Duration": 13}]}

相关问题 更多 >