利用pandas模块处理学生成绩
说在前面
利用pandas模块处理学生成绩
已有素材:存储了学生成绩信息的csv文件“stu_info.csv”。
class_name = [] #存储班级名称
stu_name = [] #存储学生姓名
cn_score = [] #语文成绩
math_score = [] #数学成绩
en_score = [] #英语成绩
with open("stu_info.csv", "r", encoding='utf-8') as file:
num = 0
for line in file: #获取每一行的数据
num += 1
if num == 1: #丢弃第一行标题
continue
temp = line.strip().split(",")
class_name.append(temp[0])
stu_name.append(temp[1])
cn_score.append(float(temp[2]))
math_score.append(float(temp[3]))
en_score.append(float(temp[4]))
#使用字典构造包含了班级、姓名和各科成绩列的DataFrame对象(不含标题)
data = {"班级":class_name, "姓名":stu_name, "语文":cn_score, "数学":math_score, "英语":en_score}
df = pd.DataFrame(data) #构造DataFrame对象
print(df)
输出结果如下:
#逐行计算各学生总分,并增加“总分”列
df["总分"] = 0.0 #试试将值改为0看看
for r in df.index:
df.at[r,"总分"] = sum(df.loc[r,["语文", "数学", "英语"]])
#rank()函数的应用:根据总分排名,并增加“排名”列
df['排名'] = df['总分'].rank(ascending=False)
print(df)
df.sort_values("总分", ascending=False, inplace=True) #根据人数降序排序
print(df)
输出结果如下:
print(df[df["姓名"]=="周奕辰"])
print(df[(df["语文"]>105) | (df["数学"]>135)])
print(df[(df["语文"]>100) & (df["英语"]>100)])
print(df[(df["语文"]>100) & (df["英语"]>100)].count()) #输出满足条件的学生数量
五、对pandas DataFrame对象做分组和聚合操作
groupby()函数的应用:将数据按“班级”分组,计算每个班级各有多少人,或计算各班平均分。代码如下:
class_df = df.groupby("班级").count() # 按关键词分组计数
class_df.sort_values('姓名', ascending=False, inplace=True) #根据人数降序排序
print(class_df)
print("#" * 50)
#将数据按“班级”分组,计算各班平均分
ave_df = df.groupby("班级").mean()
print(ave_df)
输出结果如下:
需要本文PPT、源代码和课后练习答案的,可以加入“Python算法之旅”知识星球参与讨论和下载文件,“Python算法之旅”知识星球汇集了数量众多的同好,更多有趣的话题在这里讨论,更多有用的资料在这里分享。
我们专注Python算法,感兴趣就一起来!
相关优秀文章:
评论