问题描述

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

如信息表:
学号 姓名 性别 数学 英语 Python 通信技术
1001 张三 95 86 87 90
1002 李四 98 84 88 89
如班级职务表:
学号 职务
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()函数
  • 函数的具体参数
参数 说明
io string, path object ; excel 路径。
sheet_name string, int, mixed list of strings/ints, or None, default 0 返回多表使用sheetname=[0,1],若sheetname=None是返回全表 注意:int/string 返回的是dataframe,而none和list返回的是dict of dataframe
header int, list of ints, default 0 指定列名行,默认0,即取第一行,数据为列名行以下的数据 若数据不含列名,则设定 header = None
skiprows list-like,Rows to skip at the beginning,省略指定行数的数据
skip_footer int,default 0, 省略从尾部数的int行数据
index_col int, list of ints, default None指定列为索引列,也可以使用u”strings”
names array-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['总分']

  • 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

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

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

  • Score对象新增一列“等级”,总分大于360的等级为A,总分小于270的等级为C,介于270到360之间为B
  • 自定义等级判断函数
# 等级判断函数
def grade(x):if x>=360:return "A"elif x>=270return "B"elsereturn "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,对表格数据分组与统计

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

  1. 【Python数据分析学习实例】动态新闻标题热点挖掘

    问题描述 新闻标题是新闻的主旨,从新闻标题中可以进行多种内容的挖掘,通过对学校新闻网的新闻进行分析获得热点词,基于这些标题中的热点词设计并实现构建词云的算法,最后根据词云模型统计热点词的词频,可以快速 ...

  2. Python数据分析学习系列 十三 Python建模库介绍

    Python数据分析学习系列 十三 Python建模库介绍 资料转自(GitHub地址):https://github.com/wesm/pydata-book 有需要的朋友可以自行去github下载 ...

  3. Python数据分析学习 一

    Python数据分析学习系列一 资料转自(GitHub地址):https://github.com/wesm/pydata-book 有需要的朋友可以自行去github下载 第1章 准备工作 1.1 ...

  4. Python数据分析学习笔记:使用SciKit-Learn进行数据规范化

    Python数据分析学习笔记:使用SciKit-Learn进行数据规范化 数据规范化是数据挖掘的一项基础工作.不同评价指标往往具有不同的量纲,数值见的差别可能很大,不进行处理可能会影响到数据分析的结果 ...

  5. Python数据分析学习笔记:计算向量夹角

    Python数据分析学习笔记:计算向量夹角 通过计算两个向量夹角了解两个向量之间的相关性. # 计算向量夹角import numpy as npdef included_angle(a, b):a_n ...

  6. Python数据分析学习笔记:计算相关系数

    Python数据分析学习笔记:计算相关系数 1.相关系数概念 相关系数,或称线性相关系数.皮氏积矩相关系数(Pearson product-moment correlation coefficient ...

  7. Python数据分析学习笔记05:用户画像

    Python数据分析学习笔记05:用户画像 一.用户画像 用户画像是指根据用户的属性.用户偏好.生活习惯.用户行为等信息而抽象出来的标签化用户模型.通俗说就是给用户打标签,而标签是通过对用户信息分析而 ...

  8. Python数据分析学习系列 九 绘图和可视化

    Python数据分析学习系列 九 绘图和可视化 资料转自(GitHub地址):https://github.com/wesm/pydata-book 有需要的朋友可以自行去github下载 信息可视化 ...

  9. Python数据分析学习系列 八 数据规整:聚合、合并和重塑

    Python数据分析学习系列 八 数据规整:聚合.合并和重塑 资料转自(GitHub地址):https://github.com/wesm/pydata-book 有需要的朋友可以自行去github下 ...

最新文章

  1. 下载备忘:甘特图实现的代码
  2. iOS系统库头文件中NS_AVAILABLE相关
  3. python高阶函数介绍_python高级特性和高阶函数及使用详解
  4. 微型计算机原理中断实验,微机原理实验---中断控制实验.doc
  5. 多个left join 产生多个结果
  6. 图像太宽无法输出请裁剪图像或降低分辨率然后重试_真·无监督!延世大学提出图像到图像无监督模型,实验结果超SOTA...
  7. 利用文本文档运行java程序_Java上机练习
  8. Web前端JavaScript笔记(4)节点
  9. android webview video标签,Android WebView支持html5 video标签
  10. AngularJS中的DOM value与view value
  11. 确认从博客园搬家到FPA博客园
  12. 凤凰os linux双系统,逍遥安卓模拟器双系统无缝连接完胜Remix、凤凰OS
  13. 经典场效应管如何快速关断技巧-KIA MOS管
  14. html多选框写法,HTML多选框
  15. 句法分析(成分句法分析)(依存句法分析)
  16. linux共享文件夹显示不出来,vmtools设置共享文件夹在linux的mnt/hgfs下却看不到文件夹的问题...
  17. zabbix Event acknowledgment事件确认
  18. 软件测试工程师的自我认识和定位!!
  19. Qt-Q_INIT_RESOURCE
  20. TCP/IP 之 大明王朝邮差

热门文章

  1. linux安装中文字体 yum,CentOS 7.6环境下安装中文字体库
  2. 推荐一个非常好的P2P应用
  3. 【L2-023 图着色问题】天梯赛详解
  4. POST 后台404错误
  5. 用Python代码自己写Python代码,竟如此简单
  6. python连接netcat监听的端口_netcat使用
  7. 关于GRLDR标题的修改之晨枫 ——(五四青年修改版)
  8. Openwrt自定义CGI实现
  9. 软件综合实践专题--结对编程
  10. php在线支付之支付宝