BNU奖助成绩计算方法

该博客内容涉及使用Python的pandas和xlsxwriter库来处理Excel数据。主要操作包括读取课程成绩表,按课程类型(公选、必修、专选)计算平均成绩,并将结果写入新的Excel文件。在处理过程中,遇到问号(?)表示的数据则忽略,最后输出各类型的平均成绩。若存在未选课程,则进行特殊处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用之前的操作步骤

  • 需要在表头添加几行
    第一行是课程编号
    第二行是课程类型,必修2,专选0,公选1,辅修4
    第三行的是学分
    在这里插入图片描述
  • 需要把表格去掉成绩外的部分复制到csv文件里,另存成csv(为了处理一些奇怪的格式问题
  • 再把csv打开复制回来
  • 里面会多很多问号,不用管,在程序中会处理问号
    大概是这样
    在这里插入图片描述
  • 会把计算结果另存到新的xlsx里,共三行,分别是公选,必修,专选的成绩
  • 如果未选公选或者专选的话需要另外手动处理
import  pandas  as pd
import xlsxwriter as xw
import numpy as np
df=pd.read_excel('1.xls','Sheet3')
data=pd.DataFrame(df)
print(data)
workbook = xw.Workbook('3.xlsx')  # 创建工作簿
worksheet = workbook.add_worksheet("sheet1")  # 创建子表
worksheet.activate()  # 激活表
title = ['公选', '必修','专选']  # 设置表头 必修2 公选1 专选0 辅修4
worksheet.write_row('A1', title)
num=2
gong_list=[]
bi_list=[]
zhuan_list=[]
zong_list=[]
for j in range(2,53):#人数
    gong=0
    bi=0
    zhuan=0
    gong_n=0
    bi_n=0
    zhuan_n=0
    for i in range(1,77):#课程数
        if(pd.isna(data.loc[j][i]) or data.loc[j][i]=='?'):
            continue
        else:
            #print(data.loc[j][i])
            #print(data.loc[0][i])
            if(int(data.loc[0][i])==1 ):
                #print(data.loc[j][i])
                if(data.loc[j][i]=='优秀'):
                    gong += 95*2
                    gong_n += 2
                    continue
                if (data.loc[j][i] == '良好'):
                    gong += 85 * 2
                    gong_n += 2
                    continue
                if (int(float(data.loc[j][i])) < 60):#打印有挂科的列数
                    print(j)
                gong+=int(data.loc[1][i])*int(float(data.loc[j][i]))
                gong_n+=int(data.loc[1][i])
                #print(gong)
            elif(int(data.loc[0][i])==2):
                #print(222)
                #print(int(float(data.loc[j][i])))
                if (int(float(data.loc[j][i])) < 60):
                    print(j)
                bi+=int(data.loc[1][i])*float(data.loc[j][i])#成绩要取float 可能有小数
                bi_n += int(data.loc[1][i])
                #print(bi,bi_n)
            elif(int(data.loc[0][i])==0):
                if (int(float(data.loc[j][i])) < 60):
                    print(j)
                zhuan+=int(data.loc[1][i])*int(float(data.loc[j][i]))
                zhuan_n +=int(data.loc[1][i])
            else:
                continue
                #print(zhuan)
    if(gong_n):#只考虑了未选公选课
        gong_list.append(gong/gong_n)
        zong_list.append(zhuan/zhuan_n * 0.2 + bi/bi_n * 0.7 + gong/gong_n * 0.1)
    else:
        gong_list.append(0)
        zong_list.append((zhuan/zhuan_n * 0.2 + bi/bi_n * 0.7 )/0.9)
    if(bi_n):
        bi_list.append(bi/bi_n)
    else:
        bi_list.append(0)
    if(zhuan_n):
        zhuan_list.append(zhuan/zhuan_n)
    else:
        zhuan_list.append(0)
for j in range(0,51):
    insertData = [gong_list[j],bi_list[j],zhuan_list[j],zong_list[j]]
    row = 'A' + str(num)
    worksheet.write_row(row, insertData)
    num+=1
workbook.close()


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值