admin管理员组

文章数量:1516870

python给成绩表加上姓名列

Python数据分析基础(余本)第四章练习

需求

班主任现有一班级的两张表,如下:

信息表:成绩表:现请帮班主任做如下工作:

1) 给成绩表加上姓名列;

2) 给成绩表加上字段“总分”列,并求出总分;

3) 增加列字段“等级”,标注每人“总分”的“优、良、中、及格、差”(270≤优,240≤良,210≤中,及格≤180,差≤180);

4) 计算各门课程的平均成绩以及标准差;

5) 做"总分"成绩分布图,纵坐标表示成绩,横坐标表示学号或者姓名,画出总分的均分横线,让每位同学的总分圆点分布在均分线上下,以便于观察每位同学的成绩离开均分的距离。

引入andas包进行数据分析和matlotb.ylot画图

imortmatlotb.ylotaslt

imortandasasd1) 给成绩表加上姓名列:

读取sheet数据

address='ython实战.xlsx'

sheet1=d.read_excel(address,sheet_name='成绩表')

sheet2=d.read_excel(address,sheet_name='信息表',usecs=[0,1])#读取0,1列连接两个表

sheet=d.merge(sheet1,sheet2,left_on='学号',right_on='学号')#按学号join2) 给成绩表加上字段“总分”列,并求出总分:

没有将缺考成绩设为0的话,求和时将不会’线代‘列一起求和

sheet.loc[sheet['线代']=='缺考','线代']=0#将缺考的成绩设为0

tem=sheet[['C#','线代','Python']]#提取列

sheet['总分']=tem.sum(axis=1)#求和,axis=1为行,0位列3) 增加列字段“等级”,标注每人“总分”的“优、良、中、及格、差”(270≤优,240≤良,210≤中,及格≤180,差≤180):

bins=[0,180,210,240,270,999]#分区间

labels=['差','及格','中','良','优']

sheet['等级']=d.cut(sheet.总分,bins,right=False,labels=labels)#right右区间开4) 计算各门课程的平均成绩以及标准差:

mean=sheet.mean()#所有的平均数

std=sheet.std()#所有的标准差######输出各科的平均分和标准差数据rint(f'''{sheet}n

C#的平均成绩为:{mean[1]},

C#的标准差为:{std[1]},

线代的平均成绩为:{mean[2]},

线代的标准差为:{std[2]},

Python的平均成绩为:{mean[3]},

Python的标准差为:{std[3]}.''')输出结果:5) 做"总分"成绩分布图,纵坐标表示成绩,横坐标表示学号或者姓名,画出总分的均分横线,让每位同学的总分圆点分布在均分线上下,以便于观察每位同学的成绩离开均分的距离:

做"总分"成绩分布图

lt.rcParams['font.sans-serif']=['Simhei']#设置可显示中文

total_mean=mean[4]#总分平均分

lt.title('学生总分分布图')

lt.bar(range(len(sheet['总分'])),sheet['总分'],width=0.8)

lt.xticks(range(len(sheet['总分'])),sheet['姓名'])

lt.axhne(total_mean,cor='red',nestyle='--')

lt.show()

附上完整代码

imortmatlotb.ylotaslt

imortandasasdaddress='ython实战.xlsx'

sheet1=d.read_excel(address,sheet_name='成绩表')

sheet2=d.read_excel(address,sheet_name='信息表',usecs=[0,1])#读取0,1列sheet=d.merge(sheet1,sheet2,left_on='学号',right_on='学号')#连接两个表sheet.loc[sheet['线代']=='缺考','线代']=0#将缺考的成绩设为0

tem=sheet[['C#','线代','Python']]#提取列

sheet['总分']=tem.sum(axis=1)#求和,axis=1为行,0位列bins=[0,180,210,240,270,999]#分区间

labels=['差','及格','中','良','优']

sheet['等级']=d.cut(sheet.总分,bins,right=False,labels=labels)#right右区间开mean=sheet.mean()#所有的平均数

std=sheet.std()#所有的标准差

#输出各科的平均分和标准差数据

rint(f'''{sheet}n

C#的平均成绩为:{mean[1]},

C#的标准差为:{std[1]},

线代的平均成绩为:{mean[2]},

线代的标准差为:{std[2]},

Python的平均成绩为:{mean[3]},

Python的标准差为:{std[3]}.''')#做"总分"成绩分布图

lt.rcParams['font.sans-serif']=['Simhei']#设置可显示中文

total_mean=mean[4]#总分平均分

lt.title('学生总分分布图')

lt.bar(range(len(sheet['总分'])),sheet['总分'],width=0.8)

lt.xticks(range(len(sheet['总分'])),sheet['姓名'])

lt.axhne(total_mean,cor='red',nestyle='--')

lt.show()

本文标签: python给成绩表加上姓名列