You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 12:09:46