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

如何自动映射学生JSON与成绩JSON并合并为Pandas DataFrame

解决方案:关联学生信息与成绩数据生成完整CSV

核心思路

  1. 从students.json提取学生基础信息,构建以Sid为键的映射字典,快速匹配学生姓名
  2. 遍历学生的Sid,读取对应成绩文件,从文件名直接获取Sid
  3. 给每条成绩数据添加对应的StudentName和Sid字段
  4. 合并所有数据后导出为包含完整信息的CSV

修改后的完整代码

import json
import pandas as pd

# 读取并解析学生基础信息
with open("students.json", "r") as f:
    student_data = json.load(f)

# 标准化学生数据并提取关键列
student_basic = pd.json_normalize(student_data["Students"])[["StudentName", "Sid"]]
# 构建Sid到姓名的映射字典,提升查找效率
sid_to_name = student_basic.set_index("Sid")["StudentName"].to_dict()

# 存储所有学生的完整成绩数据
merged_data = []

# 遍历每个学生的Sid,读取对应成绩文件
for sid in student_basic["Sid"]:
    file_path = f"{sid}.json"
    with open(file_path, "r") as f:
        marks_data = json.load(f)
    
    # 解析成绩数据并关联学生信息
    marks_df = pd.json_normalize(marks_data["marks"])
    marks_df["Sid"] = sid
    marks_df["StudentName"] = sid_to_name[sid]
    merged_data.append(marks_df)

# 合并所有数据并调整列顺序
final_df = pd.concat(merged_data, ignore_index=True)
final_df = final_df[["StudentName", "Sid", "English", "Math", "Art", "Science", 
                     "History", "Geography", "Physical Education", "Chemistry", 
                     "Physics", "Biology"]]

# 输出结果并导出CSV
print("\n完整学生成绩数据:")
print(final_df)
final_df.to_csv('StudentsMark.csv', index=False)

关键改动说明

  • 映射字典优化:用sid_to_name字典直接通过Sid获取姓名,避免重复遍历DataFrame
  • 直接遍历学生Sid:从基础信息的Sid列遍历,确保所有学生都被处理,不会遗漏或处理无关文件
  • 实时关联信息:读取成绩文件后立即添加对应学生的Sid和姓名,保证数据对应关系准确
  • 列顺序调整:将学生基础信息列放在最前面,让最终CSV更符合阅读习惯

内容的提问来源于stack exchange,提问作者Aks3

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 18:55:26