利用pandas解决期末总成绩的计算(python)

1.从excel文件中读出本班同学的成绩册,并处理好缺失值。
2.根据‘加分’和‘减分’两列统计出平时成绩。
3.将实验报告成绩从ABCD转换为百分制,统计出实验成绩。A为90分,B为75分,C为60分,D为40分。
4.随机生成假设的期末成绩,取值区间为40-100分。将自己的期末成绩改成你觉得可能考到的分数。
5.按照平时成绩20%,实验成绩30%,期末成绩50%的比例计算综合成绩。
6.输出你自己的平时成绩,实验成绩,期末成绩和综合成绩。
7.统计全班综合成绩[90,100],[80,89],[70,79],[60-69],[0,59]各段成绩的人数,并画饼图。
8.将完整的成绩保存到score.xlsx文件中,打开excel检查输出是否正确。

#导入库
import pandas as pd 
import numpy as np
x=pd.read_excel('1990304班.xlsx')  #导入文件
x = x.drop({0,1,2,3})  #删除多余的行
x.head(5) #显示前五行
s=x.iloc[:,0:3]  #前三列
s.columns=["序号","学号","姓名"] #为前三列命名
s.dropna(inplace=True)#只要有空,直接删除

s['加分']=np.random.randint(1,5,45)
s['减分']=np.random.randint(-5,-1,45)
s['平时成绩']=s['加分']+s['减分']

s['平时成绩']=np.random.randint(0,101,45)
s['期末成绩']=np.random.randint(40,101,45)
c=['A','B','C','D','A','B','C','D','A','B','C','D','A','B','C','D','A','B','C','D','A','B','C','D',\
  'A','B','C','D','A','B','C','D','A','B','C','D','A','B','C','D','A','B','C','D','A']
len(c)#查一下c的长度
s['实验成绩']=c

#转换数据
def transdata(x):
    if x=='A':
        return 90
    elif x=='B':
        return 75
    elif x=='C':
        return 60
    elif x=='D':
        return 40
s['实验成绩']=s['实验成绩'].map(transdata)
#修改成绩 s[列][行]
s['期末成绩'][5] =88
s['综合成绩']=s['平时成绩']*0.2+s['实验成绩']*0.3+s['期末成绩']*0.5
print(s)
#查询一个同学的所有信息
s[s.index=='朱宝']
y=pd.cut(s['综合成绩'],bins=[0,60,70,80,90,100],labels=['0-59','60-69','70-79','80-89','90-100'])#分区间
o=y.value_counts()#统计区间人数
print(o)
#画出饼图
from matplotlib import pyplot as plt
%matplotlib inline
plt.rcParams['font.sans-serif']=['SimHei']
o.plot(kind='pie',title='区间统计图')

将A、B、C、D转换为数字

#转换数据1
def trans(df):
    lst=[]
    for i in df:
        if i=='A':
            lst.append(90)
        elif i=='B':
            lst.append(75)
        elif i=='C':
            lst.append(60)
        elif i=='D':
            lst.append(40)
    return lst

#转换数据2
def transdata(x):
    if x=='A':
        return 90
    elif x=='B':
        return 75
    elif x=='C':
        return 60
    elif x=='D':
        return 40
#转换数据1
lst=trans(s['实验成绩'])
s['实验成绩']=lst
#转换数据2
s['实验成绩']=s['实验成绩'].map(transdata)

版权声明:本文为weixin_45044349原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。