如何自动映射学生JSON与成绩JSON并合并为Pandas DataFrame
解决方案:关联学生信息与成绩数据生成完整CSV
核心思路
- 从
students.json提取学生基础信息,构建以Sid为键的映射字典,快速匹配学生姓名 - 遍历学生的
Sid,读取对应成绩文件,从文件名直接获取Sid - 给每条成绩数据添加对应的
StudentName和Sid字段 - 合并所有数据后导出为包含完整信息的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
相关产品推荐
相关产品推荐

