热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【Python数据分析学习实例】对学生成绩单和信息进行整合以及数据分析

问题描述自建EXCEL文件,分为2个工作区,分别存放学生信息表(不少于30人)和班级职务表(不少于4种职务)。如信息表:学号姓名性别数学英语Python通信技术1001张三男958

问题描述

自建EXCEL文件,分为2个工作区,分别存放学生信息表(不少于30人)和班级职务表(不少于4种职务)。

如信息表:
学号姓名性别数学英语Python通信技术
1001张三95868790
1002李四98848889
如班级职务表:
学号职务
1001班长
1002学习委员

读取Excel文件数据表分别存入DataFrame对象Score和Duty。要求如下:

  1. Score对象新增一列“总分”为前四列成绩之和。
  2. Score对象依据“总分”列的值从高到低进行排序。
  3. Score对象根据性别列进行分组,输出男女生各自的平均分。
  4. 输出男女生的最高分。
  5. Score对象新增一列“等级”,总分大于360的等级为A,总分小于270的等级为C,介于270到360之间为B。
  6. 以“学号”列为关联关键,将Score对象和Duty对象合并,保留所有Score对象的数据行,合并声称新的DataFrame对象Students。
  7. 把Students对象数据存入新的Excel文件students.xlsx中。

代码实现

问题分析

  • 创建EXCEL文件,分为2个工作区,分别存放学生信息表和班级职务表。
  • 导入所需要的库

import pandas as pd

  • 读取EXCEL文件
  • 使用read_excel()函数
  • 函数的具体参数
参数说明
iostring, path object ; excel 路径。
sheet_namestring, int, mixed list of strings/ints, or None, default 0 返回多表使用sheetname=[0,1],若sheetname=None是返回全表 注意:int/string 返回的是dataframe,而none和list返回的是dict of dataframe
headerint, list of ints, default 0 指定列名行,默认0,即取第一行,数据为列名行以下的数据 若数据不含列名,则设定 header = None
skiprowslist-like,Rows to skip at the beginning,省略指定行数的数据
skip_footerint,default 0, 省略从尾部数的int行数据
index_colint, list of ints, default None指定列为索引列,也可以使用u”strings”
namesarray-like, default None, 指定列的名字。

file_name = "studata.xlsx" # 定义文件路径,这里我是将代码和EXCEL放在了同一个文件夹下,如不在同一文件夹应写成C:/studata.xlsx形式
Score = pd.read_excel(file_name, sheet_name='Sheet1', index_col=0) # 读取学生信息
Duty = pd.read_excel(file_name, sheet_name='Sheet2', index_col=0) # 读取班级职务

  • Score对象新增一列“总分”为前四列成绩之和

Score['总分'] = Score['数学'] + Score['英语'] + Score['Python'] + Score['通信技术']# 新增一列“总分”为成绩之和
Score['总分']

《【Python数据分析学习实例】对学生成绩单和信息进行整合以及数据分析》

  • Score对象依据“总分”列的值从高到低进行排序
  • 使用sort_values()函数
  • 函数的具体参数
参数说明
by指定列名(axis=0或’index’)或索引值(axis=1或’columns’)
axis若axis=0或’index’,则按照指定列中数据大小排序;若axis=1或’columns’,则按照指定索引中数据大小排序,默认axis=0
ascending是否按指定列的数组升序排列,默认为True,即升序排列
inplace是否用排序后的数据集替换原来的数据,默认为False,即不替换
na_position{‘first’,‘last’},设定缺失值的显示位置

Score.sort_values(by='总分', inplace=True, ascending=False) # 依据“总分”列的值从高到低进行排序
Score

《【Python数据分析学习实例】对学生成绩单和信息进行整合以及数据分析》

  • Score对象根据性别列进行分组
  • 输出男女生各自的平均分
  • 输出男女生的最高分
  • 使用groupby()函数
  • 具体函数的规则如下:
    df.groupby([df[属性],df[属性])(指分类的属性,数据的限定定语,可以有多个).mean()(对于数据的计算方式——函数名称)
    举例如下:
    print(df[“评分”].groupby([df[“地区”],df[“类型”]]).mean())
    #上面语句的功能是输出表格所有数据中不同地区不同类型的评分数据平均值

Score.groupby(['性别'])['总分'].mean()

《【Python数据分析学习实例】对学生成绩单和信息进行整合以及数据分析》

Score.groupby(['性别'])['总分'].max()

《【Python数据分析学习实例】对学生成绩单和信息进行整合以及数据分析》

  • Score对象新增一列“等级”,总分大于360的等级为A,总分小于270的等级为C,介于270到360之间为B
  • 自定义等级判断函数

# 等级判断函数
def grade(x):
if x>=360:
return "A"
elif x>=270
return "B"
else
return "C"

  • 使用apply和lambda的组合
  • lambda函数也叫匿名函数,即没有具体名称的函数,它允许快速定义单行函数,可以用在任何需要函数的地方
    输入是传入到参数列表x的值,输出是根据表达式(expression)计算得到的值。**
  • Python中apply函数的格式为:apply(func,*args,**kwargs)
    func可以是匿名函数。

Score['等级'] = Score['总分'].apply(lambda x: grade(x)) # 新增一列“等级”

  • 以“学号”列为关联关键,将Score对象和Duty对象合并,保留所有Score对象的数据行,合并声称新的DataFrame对象Students
  • 使用merge()函数
  • 函数的具体参数
参数说明
how默认为inner,可设为inner/outer/left/right
on根据某个字段进行连接,必须存在于两个DateFrame中(若未同时存在,则需要分别使用left_on和right_on来设置)
left_on左连接,以DataFrame1中用作连接键的列
right_on右连接,以DataFrame2中用作连接键的列
left_index将DataFrame1行索引用作连接键
right_index将DataFrame2行索引用作连接键
sort根据连接键对合并后的数据进行排列,默认为True
suffixes对两个数据集中出现的重复列,新数据集中加上后缀_x,_y进行区别

Students = pd.merge(Score, Duty, on='学号')

  • 把Students对象数据存入新的Excel文件students.xlsx中
  • 使用to_excel()函数
  • 函数的具体参数
参数说明
excel_writer字符串或ExcelWriter 对象,文件路径或现有的ExcelWriter
sheet_name字符串,默认“Sheet1”,将包含DataFrame的表的名称。
na_rep字符串,默认‘ ’,缺失数据表示方式
float_format字符串,默认None,格式化浮点数的字符串
columns序列,可选,要编写的列
header布尔或字符串列表,默认为Ture。写出列名。如果给定字符串列表,则假定它是列名称的别名。
index布尔,默认的Ture,写行名(索引)
index_label字符串或序列,默认为None。如果需要,可以使用索引列的列标签。如果没有给出,标题和索引为true,则使用索引名称。如果数据文件使用多索引,则需使用序列。
startrow左上角的单元格行来转储数据框
startcol左上角的单元格列转储数据帧
engine字符串,默认没有使用写引擎 – 您也可以通过选项io.excel.xlsx.writer,io.excel.xls.writer和io.excel.xlsm.writer进行设置。
merge_cells布尔,默认为Ture编码生成的excel文件。 只有xlwt需要,其他编写者本地支持unicode。
inf_rep字符串,默认“正”无穷大的表示(在Excel中不存在无穷大的本地表示)
freeze_panes整数的元组(长度2),默认为None。指定要冻结的基于1的最底部行和最右边的列

Students.to_excel('students.xlsx')

完整代码

import pandas as pd
# 等级判断函数
def grade(x):
if x>=360:
return "A"
elif x>=270:
return "B"
else:
return "C"
file_name = "studata.xlsx" # 定义文件路径,这里我是将代码和EXCEL放在了同一个文件夹下,如不在同一文件夹应写成C:/studata.xlsx形式
Score = pd.read_excel(file_name, sheet_name='Sheet1', index_col=0) # 读取学生信息
Duty = pd.read_excel(file_name, sheet_name='Sheet2', index_col=0) # 读取班级职务
Score['总分'] = Score['数学'] + Score['英语'] + Score['Python'] + Score['通信技术'] # 新增一列“总分”为前四列成绩之和
Score['等级'] = Score['总分'].apply(lambda x: grade(x)) # 新增一列“等级”
Score.sort_values(by='总分', inplace=True, ascending=False) # 依据“总分”列的值从高到低进行排序
print('男女生的平均分为:')
print(Score.groupby(['性别'])['总分'].mean()) # 输出男女生各自的平均分
print('男女生的最高分为:')
print(Score.groupby(['性别'])['总分'].max()) # 输出男女生的最高分
Students = pd.merge(Score, Duty, on='学号') # 以“学号”为关联关键,合并sheet1和sheet2
Students.to_excel('students.xlsx')

参考文章

8行Python代码实现excel两个sheet表合并
用Python将同一个excel中的多个sheet合并成一个sheet
python读取excel指定列名,dataframe连接,两列相减作为第三列的值
python学习002-pandas VS excel给成绩赋值等级
python:从excel文件中读取成绩,计算出平均成绩,按平均成绩降序输出,并写回到excel文件
PYTHON作业——用函数获取EXCEL中的学生成绩并做处理
pandas——很全的groupby、agg,对表格数据分组与统计


推荐阅读
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 导出功能protectedvoidbtnExport(objectsender,EventArgse){用来打开下载窗口stringfileName中 ... [详细]
  • NotSupportedException无法将类型“System.DateTime”强制转换为类型“System.Object”
    本文介绍了在使用LINQ to Entities时出现的NotSupportedException异常,该异常是由于无法将类型“System.DateTime”强制转换为类型“System.Object”所导致的。同时还介绍了相关的错误信息和解决方法。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Android JSON基础,音视频开发进阶指南目录
    Array里面的对象数据是有序的,json字符串最外层是方括号的,方括号:[]解析jsonArray代码try{json字符串最外层是 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • ASP.NET2.0数据教程之十四:使用FormView的模板
    本文介绍了在ASP.NET 2.0中使用FormView控件来实现自定义的显示外观,与GridView和DetailsView不同,FormView使用模板来呈现,可以实现不规则的外观呈现。同时还介绍了TemplateField的用法和FormView与DetailsView的区别。 ... [详细]
  • 欢乐的票圈重构之旅——RecyclerView的头尾布局增加
    项目重构的Git地址:https:github.comrazerdpFriendCircletreemain-dev项目同步更新的文集:http:www.jianshu.comno ... [详细]
  • .NetCoreWebApi生成Swagger接口文档的使用方法
    本文介绍了使用.NetCoreWebApi生成Swagger接口文档的方法,并详细说明了Swagger的定义和功能。通过使用Swagger,可以实现接口和服务的可视化,方便测试人员进行接口测试。同时,还提供了Github链接和具体的步骤,包括创建WebApi工程、引入swagger的包、配置XML文档文件和跨域处理。通过本文,读者可以了解到如何使用Swagger生成接口文档,并加深对Swagger的理解。 ... [详细]
author-avatar
315空白_580
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有