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

如何用Pandas将非常规CSV转换为指定格式的JSON?

非常规CSV转指定结构JSON的Pandas实现方案

完整代码实现

import pandas as pd
import json

def convert_csv_to_json(csv_path, output_json_path):
    # 读取全部CSV数据,不限制列
    df = pd.read_csv(csv_path)
    
    # 初始化目标JSON结构
    final_data = {"Students": {}}
    
    # 遍历每一条学生记录
    for _, student_row in df.iterrows():
        stu_id = student_row["ID"]
        stu_name = student_row["Name"]
        
        # 收集当前学生的所有考试成绩
        exam_marks = []
        # 循环处理32组考试字段(假设字段命名为Exam1_Name、Exam1_Mark...Exam32_Name、Exam32_Mark)
        for num in range(1, 33):
            name_col = f"Exam{num}_Name"
            mark_col = f"Exam{num}_Mark"
            
            # 确保字段存在且值不为空,避免报错或无效数据
            if name_col in df.columns and mark_col in df.columns:
                exam_name = student_row[name_col]
                exam_mark = student_row[mark_col]
                if pd.notna(exam_name) and pd.notna(exam_mark):
                    exam_marks.append({
                        "Exam Name": exam_name,
                        "Exam Mark": exam_mark
                    })
        
        # 将学生数据存入最终结构,ID作为键
        final_data["Students"][stu_id] = {
            "Name": stu_name,
            "Marks": exam_marks
        }
    
    # 写入JSON文件,格式化输出
    with open(output_json_path, "w", encoding="utf-8") as f:
        json.dump(final_data, f, indent=4, ensure_ascii=False)

# 调用示例,替换为你的实际文件路径
convert_csv_to_json("your_input.csv", "your_output.json")

关键逻辑说明

  • 读取完整数据:去掉原代码的usecols参数,确保能获取所有32组考试字段。
  • 按ID构建键值对:原代码把学生存入数组,不符合需求中"以ID为键"的要求,这里改用字典存储学生数据。
  • 循环处理考试字段:通过循环拼接字段名(ExamX_Name/ExamX_Mark),批量提取32组考试数据,避免重复写32次相同逻辑。
  • 空值过滤:加入pd.notna()判断,跳过空的考试记录,保证生成的JSON数据干净有效。

字段名适配

如果你的CSV中考试字段命名不是ExamX_Name/ExamX_Mark(比如是Exam name 1/Exam mark 1),只需要修改循环里的字段名拼接部分:

# 示例:适配"Exam name 1"格式的字段
name_col = f"Exam name {num}"
mark_col = f"Exam mark {num}"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 13:45:20