利用pandas模块处理学生成绩

Python算法之旅

共 2817字,需浏览 6分钟

 ·

2021-11-23 16:23

说在前面

Python语言之所以受到广大用户的欢迎,其丰富的生态环境是重要因素之一。高质量的第三方库数不胜数,利用这些第三方库,我们可以轻松地实现各种复杂功能,解决实际问题。如何学习使用第三方库?是熟读文档,待熟悉各种函数功能后再干活?还是从问题出发,根据实际需要去查询文档,模仿和借鉴示范案例代码,迁移到自己的实际项目中?此二者见仁见智,没有唯一的答案。
“数据处理与应用”是高中信息技术浙教版必修一第四章的内容,“利用pandas模块处理数据”是重要知识点之一,其内容多、难度大,课不好上,稍不注意就会落入列举语法知识点的窠臼。在有限的课时条件下,不可能深入地研究相关模块的全部知识点;选择合适的案例,让学生在解决实际问题的过程中体验编程方法,学会查阅帮助文档,掌握利用pandas模块处理数据的基本思路,是教学的重点。
为了提高课堂教学效率,确保能够顺利完成教材要求的“百家姓数据处理”项目,我事先为学生准备了一份学案,先解决一个简单的“学生成绩处理”项目,希望学生通过阅读和运行示例代码,能够理解各功能函数的作用,实现知识的迁移。
因为授课的班级是学考班,对学生要求比较低,所以此案例功能较为简单。刚刚接触新课程、新教材,适宜的教学案例非常匮乏,需要广大教师的共同努力来充实案例题库,希望我今天的分享能起到抛砖引玉的作用,欢迎大家批评指正,与我交流。

经典案例

利用pandas模块处理学生成绩

已有素材:存储了学生成绩信息的csv文件“stu_info.csv”。


一、创建pandas DataFrame对象
创建pandas DataFrame对象的方法很多,最简单的方法是直接使用read_csv()read_excel()等函数从数据源读取数据创建DataFrame对象,代码如下:
df = pd.read_csv("stu_info.csv")
也可以先读取文件数据,并存储到各列表,再创建字典并构造DataFrame对象。需要注意的是从文件中读取的数据均为字符串类型,需要将各科成绩转换成数值类型。代码如下:
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)

输出结果如下:


二、pandas DataFrame对象增加列
与为字典增加新的键值对类似,可以为pandas DataFrame对象增加新的列。代码如下:
#逐行计算各学生总分,并增加“总分”列df["总分"] = 0.0 #试试将值改为0看看for r in df.index:    df.at[r,"总分"] = sum(df.loc[r,["语文", "数学", "英语"]])#rank()函数的应用:根据总分排名,并增加“排名”列df['排名'] = df['总分'].rank(ascending=False)print(df)
输出结果如下:


三、对pandas DataFrame对象排序
sort_values()函数的应用:按照总分降序排列。代码如下:
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算法,感兴趣就一起来!



相关优秀文章:

阅读代码和写更好的代码

最有效的学习方式

课堂1:海龟绘图之正四边形及其拓展

课堂2:海龟绘图之多彩螺旋线

课堂3:海龟绘图之绘制虚线

课堂4:循环结构经典案例

课堂5:解析算法经典案例

课堂6:枚举算法经典案例


浏览 135
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报