当前位置: 首页 > news >正文

从两个 Excel 表格中提取相关信息,并根据学生的 学号 和 姓名 将第一个表格中的成绩数据填充到第二个表格中(附Python代码)

目录

  • 一、需求
  • 二、实现
    • 2.1 安装pandas和openpyxl库
    • 2.2 代码参数修改
    • 2.3 代码
    • 2.4 运行结果

一、需求

将从两个 Excel 表格中提取相关信息,并根据学生的 学号 和 姓名 将第一个表格中的成绩数据填充到第二个表格中。其中第一个表格内容是根据学生综合成绩排名排好顺序的,而第二个表格中只有学生学号和姓名,随机排序的。现在需要将表格1中学生的学号和姓名对应的成绩统计好表格2中对应名下。

第一个表格内容见下:

在这里插入图片描述

第二个表格内容见下:

在这里插入图片描述

二、实现

使用 pandas 库来读取 Excel 表格并根据学号和姓名来匹配成绩。

2.1 安装pandas和openpyxl库

在对应环境的终端中使用下面命令安装:

pip install pandas openpyxl -i https://pypi.mirrors.ustc.edu.cn/simple/

2.2 代码参数修改

使用代码时,只需要分别修改两个表格的路径,见下:
在这里插入图片描述

2.3 代码

完整的代码见下:

import pandas as pd# 读取第一个和第二个Excel表格
file1 = 'Excel/1-4班 综合素质测评汇总表 (2).xlsx'  # 替换为第一个Excel的文件路径
file2 = 'Excel/综测分导入.xls'  # 替换为第二个Excel的文件路径df1 = pd.read_excel(file1)            # pd.read_excel() 用于读取 Excel 文件
df2 = pd.read_excel(file2)            # df1 和 df2 是读取 Excel 后生成的 Pandas 数据框(DataFrame),它们分别存储了两个 Excel 文件中的数据。print('df1',df1.columns)              # 打印 df1 和 df2 的列名(columns 属性)
print('df2',df2.columns)# 根据学号和姓名,将第一个表格中的相关成绩信息填充到第二个表格中
df_merged = pd.merge(df2, df1[['学号', '姓名', '体育成绩', '文体类加分', '惩罚分数','奖励分数','学业成绩','操行考评成绩', '诚信分', '思想政治基础分',  '担任学生工作', '公益活动', '竞赛获奖']],on=['学号', '姓名'],how='left')
'''
pd.merge() 用于合并两个数据框。
df2 是第二个表格数据,作为基础表格。
df1[['学号', '姓名', '体育成绩', '文体类加分', '惩罚分数', '奖励分数', '学业成绩', '操行考评成绩', '诚信分', '思想政治基础分', '担任学生工作', '公益活动', '竞赛获奖']] 表示从第一个表格 df1 中选择这些列,这些列包含需要从第一个表格复制到第二个表格的成绩信息。
on=['学号', '姓名'] 表示按照 学号 和 姓名 两列来进行数据匹配和合并。即,如果 df2 和 df1 中有相同的 学号 和 姓名,那么将 df1 中的相关成绩信息复制到 df2 中。
how='left' 表示进行“左连接”(Left Join)。这意味着保留 df2 中所有的行,即使这些行在 df1 中没有匹配的值。如果 df1 中没有对应的 学号 和 姓名,这些列会填充 NaN(空值)。
'''# 保存合并后的数据到一个新的Excel表格中
df_merged.to_excel('path_to_output_excel_3.xlsx', index=False)print("数据已成功合并并保存到新的Excel表格中!")

2.4 运行结果

运行上面代码,数据会重新生成在根目录下的path_to_output_excel_3.xlsx文件夹中,见下:

在这里插入图片描述
在这里插入图片描述

下面是最终处理完的样子,与表格2中所需内容一致。

在这里插入图片描述

相关文章:

  • 什么是 JWT?它是如何工作的?
  • vue数组根据某些条件进行二次切割
  • 1.2.1 HuggingFists安装说明-Linux安装
  • 如何用Prometheus监控禁用了Actuator的SpringBoot?
  • 渗透测试--文件上传常用绕过方式
  • Python编码系列—Python责任链模式:打造灵活的请求处理流程
  • 鸿蒙HarmonyOS之封装Http请求工具类
  • Llama微调以及Ollama部署
  • MRC接收机
  • 【数字图像处理】小白也能懂,最浅显方式手撕直方图均衡化(附python实现)
  • python 02 List
  • 药物临床试验机构备案信息数据库查询方法(支持数据下载)
  • Git常用方法——详解
  • 防止电脑电池老化,禁止usb或者ac接口调试时充电
  • STM32CubeMX工程printf问题
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • input实现文字超出省略号功能
  • Median of Two Sorted Arrays
  • MYSQL 的 IF 函数
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • Spring Boot快速入门(一):Hello Spring Boot
  • Vim Clutch | 面向脚踏板编程……
  • 1.Ext JS 建立web开发工程
  • 阿里云ACE认证之理解CDN技术
  • #{} 和 ${}区别
  • ${ }的特别功能
  • %3cscript放入php,跟bWAPP学WEB安全(PHP代码)--XSS跨站脚本攻击
  • (2)STL算法之元素计数
  • (2024最新)CentOS 7上在线安装MySQL 5.7|喂饭级教程
  • (附源码)ssm旅游企业财务管理系统 毕业设计 102100
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • **Java有哪些悲观锁的实现_乐观锁、悲观锁、Redis分布式锁和Zookeeper分布式锁的实现以及流程原理...
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .NET Core、DNX、DNU、DNVM、MVC6学习资料
  • .NET Framework 3.5安装教程
  • .NET8.0 AOT 经验分享 FreeSql/FreeRedis/FreeScheduler 均已通过测试
  • /dev/sda2 is mounted; will not make a filesystem here!
  • /var/spool/postfix/maildrop 下有大量文件
  • @antv/x6 利用interacting方法来设置禁止结点移动的方法实现。
  • @cacheable 是否缓存成功_让我们来学习学习SpringCache分布式缓存,为什么用?
  • [ 渗透测试面试篇 ] 渗透测试面试题大集合(详解)(十)RCE (远程代码/命令执行漏洞)相关面试题
  • [bzoj1901]: Zju2112 Dynamic Rankings
  • [C#]winform部署官方yolov10目标检测的onnx模型
  • [C++] 多线程编程-thread::yield()-sleep_for()
  • [C++] 容器适配器:深入理解Stack与Queue的底层原理
  • [CISCN 2023 初赛]go_session
  • [Deepin 15] 编译安装 MySQL-5.6.35
  • [github配置] 远程访问仓库以及问题解决
  • [Hadoop in China 2011] Hadoop之上 中国移动“大云”系统解析
  • [HTML]Web前端开发技术12(HTML5、CSS3、JavaScript )——喵喵画网页
  • [JS入门到进阶] 7条关于 async await 的使用口诀,新学 async await?背10遍,以后要考!快收藏
  • [LeetCode]—Permutations 求全排列
  • [linux][命令]linux文件操作命令大全
  • [NOI2020统一省选 A] 组合数问题 (推式子)