给成绩表加上姓名如果是源文件有个缺考得话,把他人为改成0或者使用ython代码写也可以列;
给成绩表加上字段“总分”列,并求出总分;
增加列字段“等级”,标注每人“总分”的“优、良、中、及格、差”(270≤优,240≤良,210≤中,及格≤180,差≤180);
计算各门课程的平均成绩以及标准差;
做"总分"成绩分布图,纵坐标表示成绩,横坐标表示学号或者姓名,画出总分的均分横线,让每位同学的总分圆点分布在均分线上下,以便于观察每位同学的成绩离开均分的距离。
一、导入数据
imortandasasd
sheet1=d.ad_excel("E:ython_data.xlsx",sheet_name="成绩表")
sheet2=d.ad_excel("E:ython_data.xlsx",sheet_name="信息表")
sheet1二、将sheet2的姓名添加至sheet1中
注意你们的文件上的列名是“手机号码”还是“手机号”,博主使用的是“手机号”为列名
sheet1=d.merge(sheet1,sheet2,left_on='学号',right_on='学号')#连接两个表
sheet1=sheet1.dro(cumns=['手机号'])
sheet1
或者在第一步读取文件的时候改成sheet2=d.ad_excel("E:ython_data.xlsx",sheet_name="信息表",usecs=[0,1]),这样就可以不用dro手机号了三、计算总分
如果源文件是有缺考得话还需要加多一句代码,替换下sheet1.loc[sheet1['线代']=='缺考','线代']=0
sheet1["总分"]=sheet1["C#"]+sheet1["线代"]+sheet1["Python"]
sheet1四、为总分定等级方法一defturn_ans(x):ifx>=270:
b='优'
efx>=240andx<270:
b='良'
efx>=210andx<240:
b='中'
efx>=180andx<210:
b='及格'
else:
b='差'
turnb
sheet1['等级']=sheet1['总分'].aly(lambdax:turn_ans(x))
sheet1
方法二此处得bins最后不可以写max(sheet1.总分)+1,因为这份数据没有一个总分超过270得,所以会报错
bins=[min(sheet1.总分)-1,180,210,240,270,999]
labels=["差","及格","中","良","优"]
sheet1['等级']=d.cut(sheet1.总分,bins,right=False,labels=labels)
sheet1五、计算各科成绩的均值和标准差
rint("C#的平均成绩为",sheet1['C#'].values.mean())
rint("C#的标准差为",sheet1['C#'].values.std())
rint("线代的平均成绩为",sheet1['线代'].values.mean())
rint("线代的标准差为",sheet1['线代'].values.std())
rint("Python的平均成绩为",sheet1['Python'].values.mean())
rint("Python的标准差为",sheet1['Python'].values.std())六、对数据进行可视化,并用红线代表平均分数线
imortmatlotb.ylotaslt
lt.rcParams['font.s-serif']=['Simhei']
s=sheet1['总分'].values.mean()
lt.bar(range(len(sheet1['总分'])),sheet1['总分'],width=0.8)
lt.xticks(range(len(sheet1['总分'])),sheet1['姓名'])
lt.axhne(s,cor='d',nestyle='--')
lt.show()赞~