从两个 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中所需内容一致。