Python-获取excel数据 - 成绩统计

news2025/1/11 0:17:44

Pandas库基础操作

pandas库是Python中非常受欢迎的数据分析库,提供了快速、灵活和富有表现力的数据结构,便于轻松地进行数据清洗和分析。因为它不是标准库,使用前确保环境已经安装了Pandas库。

pip install pandas

接下来,通过一个简单的例子来了解pandas的基本用法。假设有一个包含员工信息的电子表格文件名为“员工表.csv”,文本内容如下。

名字,年龄,部门,薪水  
艾莉,28,人事,8000  
刘包,32,研发部,13000
凯莉,25,市场部,6500

利用pandas库读取文件信息,首先导入pandas库并改名为“pd”,这样可以保证代码的简洁和避免命名冲突 ,示例代码如下。

import pandas as pd  
# 读取CSV文件  
df = pd.read_csv('员工表.csv')
# 查看一个DataFrame对象的前几行和最后几行
print("======前2行=======")
print(df.head(2))  # 默认是5项
print("======最后一行=======")
print(df.tail(1))
print("======列名字=======")
# 列标签
print(df.columns)

# 输出
======前2行=======
   名字  年龄   部门     薪水
0  艾莉  28   人事   8000
1  刘包  32  研发部  13000
======最后一行=======
   名字  年龄   部门    薪水
2  凯莉  25  市场部  6500
======列名字=======
Index(['名字', '年龄', '部门', '薪水'], dtype='object')

注意:这里推荐使用Jupyter-notebook编辑器进行学习和代码验证,notebook的好处是可以按步骤,分阶段地运行代码,适合进行数据分析,反复对数据进行调整与运算。若忘记怎样启动Jupyter,请查看本书1.2.2小节。
下面是pandas库常见操作,代码如下。

# 读取Excel文件
df = pd.read_csv('员工表.csv')
# 数据观察和操作
print("显示DataFrame的基本信息,如列名、数据类型等")
print(df.info())
print("生成描述性统计信息,如平均值、标准差等")
print(df.describe())
print("返回DataFrame各列的数据类型")
print(df.dtypes)
print("检查DataFrame中的缺失值")
print(df.isnull)
# 数据选择和过滤
print("选择DataFrame中的某一列")
print(df["部门"])
print("通过标签选择特定行和列")
print(df.iloc[0, 1])
print("根据条件过滤DataFrame的行。")
print(df[df['薪水'] > 10000])
print("按指定列对DataFrame进行分组")
# 数据聚合和统计
# 按指定列对DataFrame进行分组
group = df.groupby('部门')
print(group.describe())
print("计算DataFrame中每列的平均值")
print(df["薪水"].min())
print("计算DataFrame中每列的总和")
print(df["薪水"].sum())
print("计算DataFrame中每列的最大值")
print(df["薪水"].max())
print("计算DataFrame中每列的最小值")
print(df["薪水"].min())
# 输出内容较多,这里不作展示。

实战:学生成绩统计与分析

在这里插入图片描述
1.学生成绩数据处理
(1)导入学生成绩数据表格
首先,需要一个包含学生姓名和成绩的Excel表格。假设两个表格名为“学生期中成绩.xlsx”和“学生期末成绩.xlsx”,并且包含了一个名为“成绩”的工作表,其中包含学生的所有成绩信息。现在打开Jupyter-notebook,使用Python的pandas库来处理Excel表格数据。首先,安装并导入pandas库,然后使用read_excel()函数来导入学生成绩数据表格。

import pandas as pd
# 读取Excel文件
df_midterm = pd.read_excel('期中考试.xlsx', sheet_name='成绩')
df_final = pd.read_excel('期末考试.xlsx', sheet_name='成绩')

(2)读取和解析Excel数据
一旦导入了学生成绩数据表格,使用pandas库的各种功能来读取和解析数据。例如,使用head()函数来查看前几行数据,并使用columns属性来获取列名。

# 显示数据的前5行
print(df_midterm.head())
print(df_final.head())
# ------------ 结果 ---------------
    姓名   成绩
0  林同学   89
1  叶同学  118
2  陈同学  110
3  邓同学   91
4  黄同学  116
    姓名   成绩
0  林同学  110
1  叶同学   86
2  陈同学   88
3  邓同学   93
4  黄同学  109

(3)清洗和预处理数据
在进行统计和分析之前,需要对数据进行清洗和预处理,以确保数据的准确性和一致性。如处理缺失值、删除重复项或进行数据类型转换。

# 处理缺失值
df_midterm= df_midterm.dropna()
df_final = df_final.dropna()
# 删除重复项
df_midterm= df_midterm.drop_duplicates()
df_final = df_final.drop_duplicates()
# 数据类型转换,改为浮点数
df_midterm['期中成绩'] = df_midterm['期中成绩'].astype(float)
df_final['期末成绩'] = df_final['期末成绩'].astype(float)

通过以上步骤,完成了学生成绩数据的导入、读取和解析,以及数据的清洗和预处理。接下来,进一步进行统计和可视化分析,以便更好地了解学生的表现情况。

2.统计学生成绩

现在进行学生成绩统计,通过计算学生的平均成绩和总分,并对成绩进行排名、分析成绩分布和通过率,深入了解学生的表现情况,对比两次考试可以看到这学期学生的学习情况,是否有进步。

(1)计算学生的平均成绩
使用pandas库的mean()函数来计算学生的平均成绩,代码如下。

# 计算平均成绩
average_score_midterm = df_midterm['成绩'].mean()
print("学生期中平均成绩为: ", average_score_midterm)
average_score_final = df_final['成绩'].mean()
print("学生期末平均成绩为: ", average_score_final)
# ------------ 结果 ---------------
学生期中平均成绩为:  102.395833333
学生期末平均成绩为:  103.125
(2)对学生的成绩进行排名
# 期中成绩排名学生的成绩
df_midterm['成绩排名'] = df_midterm['成绩'].rank(ascending=False)
# 数据类型转换,排名使用整数
df_midterm['成绩排名'] = df_midterm['成绩排名'].astype('int32')
print(df_midterm.head())
# ------------ 结果 ---------------
    姓名     成绩  成绩排名
0  林同学   89.0    40
1  叶同学  118.0     3
2  陈同学  110.0    18
3  邓同学   91.0    38
4  黄同学  116.0     6

期末考试的成绩也按照同样的方式进行处理,以便通过比较期中和期末考试的成绩排名来了解学生的学习状况及名次变化。

(3)分析成绩排名变化
在数据处理过程中,利用pandas库的merge()函数将两个数据表格进行合并。合并的主要依据是学生姓名,如果存在同名学生,我们可以通过学号作为合并数据的依据。这种处理方式能够有效地将相关数据进行整合,以进一步进行数据分析与处理。

# 比较期中期末成绩排名变化
res = pd.merge(df_final, df_midterm, left_on="姓名", right_on="姓名", how="inner")
print(res.head())
# ------------ 结果 ---------------
    姓名   成绩_x  期末成绩排名   成绩_y  成绩排名
0  林同学  110.0      13   89.0    40
1  叶同学   86.0      47  118.0     3
2  陈同学   88.0      45  110.0    18
3  邓同学   93.0      40   91.0    38
4  黄同学  109.0      15  116.0     6

若有相同列名,程序会帮我们添加标识区分开来,但为了更直观查看数据,我们更改列名,让数据更清晰明了。

# 修改列名
res.rename(columns={'成绩_x': '期末成绩', '成绩_y': '期中成绩', '成绩排名': '期中成绩排名'}, inplace=True)
print(res.head())
# ------------ 结果 ---------------
    姓名   期末成绩  期末成绩排名   期中成绩  期中成绩排名
0  林同学  110.0      13   			89.0      	40
1  叶同学   86.0      47  			118.0       	3
2  陈同学   88.0      45  			110.0      	18
3  邓同学   93.0      40   			91.0      	38
4  黄同学  109.0      15  			116.0       	6

现在有两个方法来判断学生的情况,可以比较成绩或者排名,当然排名更具备说服力,毕竟每次考试的难度都不是一样的,成绩都是相对的。那么让期末排名和期中排名相减,如果是负数就是进步,如果是正数则为退步。

# 查看成绩排名变化
res["排名变化"] = res["期末成绩排名"] - res["期中成绩排名"]
res['变化'] = res['排名变化'].apply(lambda x: '进步' if x < 0 else '退步')
print(res.head())
# ------------ 结果 ---------------
    姓名   期末成绩  期末成绩排名   期中成绩  期中成绩排名  排名变化  变化
0  林同学  110.0      13   			89.0      	40   	-27  	进步
1  叶同学   86.0      47  			118.0       	3    	44 		退步
2  陈同学   88.0      45  			110.0      	18    	27 		退步
3  邓同学   93.0      40   			91.0      	38     	2   		退步
4  黄同学  109.0      15  			116.0       	6     	9  		退步

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2112698.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LLM Attention and Rotary Position Embedding(旋转位置编码)

旋转位置编码&#xff08;Rotary Position Embedding&#xff0c;RoPE&#xff09;是一种能够将相对位置信息依赖集成Attention计算里的方法。就是在做词表映射的时候不是单一的进行一个embedding计算&#xff0c;还考虑位置信息。 一些资料 [1] https://arxiv.org/pdf/2104.0…

Ubuntu20.04+ros-noetic配置Cartographer

一、概述 因为要配置激光SLAM&#xff0c;Cartographer属于激光雷达SLAM 中比较经典的一款&#xff0c;在学习之前先将其在Ubuntu20.04首先配置出来并成功运行demo。 二、具体操作 &#xff08;一&#xff09;概述 使用平台是Windows的wsl2上的Ubuntu20.04子系统&#xff0c;…

.NET技巧 - 控制台应用隐藏窗口

.NET技巧 - 控制台应用隐藏窗口 前言 起初我通过C#创建控制台应用程序免杀shellcode加载器时&#xff0c;默认会启动一个cmd控制台窗口 但当我们希望将其免杀loader用于钓鱼时&#xff0c;我们必然不希望出现这种情况。在执行进程迁移、进程注入、进程镂空等持久化权限维持操…

如何在Word中插入表格并进行高级格式化:冒号对齐、添加下划线并分栏

如何在Word中插入表格并进行高级格式化&#xff1a;详细教程 在Word中&#xff0c;表格是一个非常常用的工具&#xff0c;能够帮助我们更好地组织和展示信息。除此之外&#xff0c;本文还将深入探讨如何实现冒号对齐、添加专业的下划线以及隐藏表格线等高级技巧。通过这些技巧…

微信小程序中如何监听元素进入目标元素

Page({onLoad: function(){// 如果目标节点&#xff08;用选择器 .target-class 指定&#xff09;进入显示区域以下 100px 时&#xff0c;就会触发回调函数。wx.createIntersectionObserver().relativeToViewport({bottom: 100}).observe(.target-class, (res) > {res.inter…

NC栈和排序

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 描述 给你一个 1 到…

WGCLOUD 安装和基本使用

WGCLOUD官网下载安装包&#xff1a;www.wgstart.com 1、部署WGCLOUD运行的前置条件说明 WGCLOUD包括&#xff1a;server为服务端&#xff08;或主控端&#xff09;&#xff0c;agent为客户端&#xff08;探针端、被控端&#xff09; WGCLOUD的server和agent&#xff0c;可以部…

LoRA微调基础知识点

LoRA&#xff08;Low-Rank Adaptation&#xff09; LoRA论文地址 LoRA微调模型结构可训参数和配置详解 一般理解就是在模型Linear层的输入增加两个权重矩阵A和B&#xff0c;代替原有参数矩阵W进行训练。 如果训练从左侧进行计算则需要 d d d \times d dd的参数量&#xff…

开篇: 为什么要做这个项目?

背景 最近工作中遇到一个需求需要实现一版在线的Web编辑器&#xff0c;类似 Vue Playground 的效果&#xff0c;但是Vue playground 整体体验下来不是很好&#xff0c;和本地 VSCode 编辑器开发体验差距较大(虽然理解在线编辑器没必要完全照着本地开发体验来)。 经过多方体验调…

Harmony OS DevEco Studio 如何导入第三方库(以lottie为例)?-- HarmonyOS自学2

在做鸿蒙开发时&#xff0c;离不开第三方库的引入 一.有哪些支持的Harmony OS的 第三方库&#xff1f; 第三方库下载地址&#xff1a; 1 tpc_resource: 三方组件资源汇总 2 OpenHarmony三方库中心仓 二. 如何加入到DevEco Studio工程 以 lottie为例 OpenHarmony-TPC/lot…

单链表的定义

一.单链表的定义&#xff1a; 相比于顺序表&#xff0c;单链表不可随机存取&#xff0c;因此单链表中查找数据必须是一个一个找-->查找效率低 二.用代码定义一个单链表&#xff1a; 单链表每一个节点有数据元素和存放该元素的指针&#xff0c;该指针指向下一个节点 GetEle…

[米联客-XILINX-H3_CZ08_7100] FPGA程序设计基础实验连载-37 LVDS信号环路测试

软件版本&#xff1a;VIVADO2021.1 操作系统&#xff1a;WIN10 64bit 硬件平台&#xff1a;适用 XILINX A7/K7/Z7/ZU/KU 系列 FPGA 实验平台&#xff1a;米联客-MLK-H3-CZ08-7100开发板 板卡获取平台&#xff1a;https://milianke.tmall.com/ 登录“米联客”FPGA社区 http…

2024年全国大学生数学建模A题借鉴论文

问题 1&#xff1a; 舞龙队的动态位置与速度计算 1. **螺旋线的几何建模**&#xff1a;根据题目描述&#xff0c;舞龙队沿着等距螺旋线前进。螺旋线的螺距为 55 cm&#xff0c; 需根据极坐标公式确定每节板凳的位置。 - 极坐标螺旋线方程&#xff1a;\( r a b\theta \)&…

算法专题一: 双指针

目录 前言1. 移动零&#xff08;easy&#xff09;2. 复写零&#xff08;easy&#xff09;3. 快乐数&#xff08;medium&#xff09;4. 盛水最多的容器&#xff08;medium&#xff09;5. 有效三角形的个数&#xff08;medium&#xff09;6. 和为 s 的两个数字&#xff08;easy&a…

Linux CentOS 7.9 安装mysql8

1、新建mysql文件夹 数据比较大&#xff0c;所以我在服务器另外挂了一个盘装mysql&#xff0c;和默认安装一个道理&#xff0c;换路径即可 cd ../ //创建文件夹 mkdir mysql //进入mysql文件夹 cd mysql 2、下载mysql8.0安装包并解压、重命名 //下载安装包 wget https://dev…

元宇宙先驱,城市区块链

blockcity 务实元宇宙的先行者,去中心化自治组织开放平台,轻松加入或创建你的DAO组织创新采用Web3和区块链思维,blockcity 真正人人可用,无需下载安装 《福建省元宇宙产业发展行动计划&#xff08;2024 — 2026 年&#xff09;在“促进数字创意产业发展”条目提到&#xff0c;…

ubuntu 20.04 一直卡在登录界面,即使密码正确也无法登录(失败记录)

ubuntu 20.04 一直卡在登录界面&#xff0c;即使密码正确也无法登录 这次是装实体机&#xff0c;一次失败的尝试。。。 名称型号CPUIntel Xeon E5-2673 V3GPURTX 3060 mobile 安装的时候不要选install third-party software for graphics and Wi-fi hardware and additional …

oracle锁的机制

文章目录 oracle锁的机制1. 概括2.锁的模式3.锁查看 死锁1. 说明2.死锁产生条件3.解决死锁冲突4. 事务和死锁预防总结 oracle锁的机制 1. 概括 1&#xff09;说明 锁是一种机制&#xff0c;多个事务同时访问一个数据库对象时&#xff0c;该机制可以实现对并发的控制 2&…

目标检测常见数据集格式

目标检测常见的数据集格式COCO、YOLO、VOC、DATA。 1、COCO 数据标注格式JSON&#xff0c;JSON文件中包含多个关键字段&#xff0c;如info、images、annotations等&#xff0c;分别存储了数据集的基本信息、图像信息和标注信息 COCO数据集的下载 官网地址&#xff1a;http://…

Computer Exercise

每日一练 单选题 在计算机机箱前面板接口插针上&#xff08;     C   &#xff09;表示复位开关。 A.SPK    B.PWRLED    C.RESET    D.HDDLED每台PC机最多可接&#xff08;     B   &#xff09;块IDE硬盘。 A.2    B.4    C.6    D.8&#xff08;    …