如何将Pandas DataFrame转换为指定结构的嵌套JSON
Pandas DataFrame 转换为指定嵌套结构JSON方案
你原有写法存在两个问题:
- 未将
RollCall列设置为DataFrame索引,orient='index'模式下会使用DataFrame默认的整数索引作为键,和你需要的RollCall学号键不匹配 to_json()方法直接返回JSON格式字符串,直接赋值给字典值后,整体序列化时会把该字符串作为普通字符串值转义,无法生成嵌套的对象结构。
直接使用以下代码即可得到目标输出:
import pandas as pd import json # 读取/构造你的DataFrame,此处为示例数据 df = pd.DataFrame({ 'RollCall': [1, 2, 3, 4], 'Physics': [20, 25, 15, 20], 'Chemisty': [30, 30, 12, 15], 'Maths': [25, 30, 35, 30] }) # 核心逻辑:将RollCall设为索引后先转Python原生字典,再包裹外层结构 result = { "StudentDetails": df.set_index("RollCall").to_dict(orient="index") } # 序列化为格式化的JSON字符串 json_output = json.dumps(result, indent=2)
执行后输出的JSON结构如下,和你给出的预期格式完全匹配:
{ "StudentDetails": { "1": {"Physics": 20, "Chemisty": 30, "Maths": 25}, "2": {"Physics": 25, "Chemisty": 30, "Maths": 30}, "3": {"Physics": 15, "Chemisty": 12, "Maths": 35}, "4": {"Physics": 20, "Chemisty": 15, "Maths": 30} } }
如果你确实不需要RollCall为4的学生记录,在转字典前加一行过滤即可:
df = df[df["RollCall"] != 4]
内容的提问来源于stack exchange,提问作者Anant
相关产品推荐
相关产品推荐

