使用之前的操作步骤
- 需要在表头添加几行
第一行是课程编号
第二行是课程类型,必修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()