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

Pandas实现Excel的vlookup并且在指定列后面输出

背景:

  • 有两个excel,他们有相同的一个列;
  • 按照这个列合并成一个大的excel,即vlookup功能

要求:

  1. 只需要第二个excel的少量的列,比如从40个列中挑选2个列
  2. 新增的来自第二个excel的列需要放到第一个excel指定的列后面;
  3. 将结果输出到一个新的excel;
import pandas as pd

# 文件路径
grade_path = r'C:\TELCEL_MEXICO_BOT\A\学生成绩表.xlsx'
sinfo_path = r'C:\TELCEL_MEXICO_BOT\A\学生信息表.xlsx'
output_path = r'C:\TELCEL_MEXICO_BOT\A\合并后的数据表.xlsx'  # 保存路径

# 读取数据
df_grade = pd.read_excel(grade_path)
df_sinfo = pd.read_excel(sinfo_path)

# 打印前几行数据
print("学生成绩表:")
print(df_grade)
学生成绩表:
    班级    学号  语文   数学  英语
0  C01  S001  99   84  88
1  C01  S002  66   95  77
2  C01  S003  68   68  61
3  C01  S004  63   66  82
4  C01  S005  72   95  94
5  C01  S006  80   97  97
6  C01  S007  78   95  90
7  C01  S008  56   99  89
8  C01  S009  66  100  97
9  C01  S010  89   99  67

print("\n学生信息表:")
print(df_sinfo)
学生信息表:
     学号  姓名 性别  年龄  籍贯
0  S001  怠涵  女  23  山东
1  S002  婉清  女  25  河南
2  S003  溪榕  女  23  湖北
3  S004  漠涓  女  19  陕西
4  S005  祈博  女  24  山东

# 选择需要的列
df_sinfo = df_sinfo[['学号', '姓名', '性别']]
print(df_sinfo)
     学号  姓名 性别
0  S001  怠涵  女
1  S002  婉清  女
2  S003  溪榕  女
3  S004  漠涓  女
4  S005  祈博  女

# 合并数据.
#左表df_grade,右表df_sinfo, how='left'以左表中的'学号'为键在右表进行vlookup查找
df_merged = pd.merge(df_grade, df_sinfo, how='left', on=['学号'])

# 调整列的顺序
cols = df_merged.columns.tolist()  # 获取所有列名
cols = cols[:2] + cols[-2:] + cols[2:-2]  # 重新排列列的顺序
df_merged = df_merged[cols]

# 打印合并后的数据
print("\n合并后的数据表:")
print(df_merged)
合并后的数据表:
    班级    学号   姓名   性别  语文   数学  英语
0  C01  S001   怠涵    女  99   84  88
1  C01  S002   婉清    女  66   95  77
2  C01  S003   溪榕    女  68   68  61
3  C01  S004   漠涓    女  63   66  82
4  C01  S005   祈博    女  72   95  94
5  C01  S006  NaN  NaN  80   97  97
6  C01  S007  NaN  NaN  78   95  90
7  C01  S008  NaN  NaN  56   99  89
8  C01  S009  NaN  NaN  66  100  97
9  C01  S010  NaN  NaN  89   99  67

# 将合并后的数据保存到指定路径
df_merged.to_excel(output_path, index=False)
print(f"\n合并后的数据已保存到 {output_path}")
合并后的数据已保存到 C:\TELCEL_MEXICO_BOT\A\合并后的数据表.xlsx

vlookup后的异常值处理

# 读取数据
df_grade = pd.read_excel(grade_path)
    班级    学号  语文   数学  英语
0  C01  S001  99   84  88
1  C01  S002  66   95  77
2  C01  S003  68   68  61
3  C01  S004  63   66  82
4  C01  S005  72   95  94
5  C01  S006  80   97  97
6  C01  S007  78   95  90
7  C01  S008  56   99  89
8  C01  S009  66  100  97
9  C01  S010  89   99  67

df_sinfo = pd.read_excel(sinfo_path)
     学号  姓名 性别  年龄  籍贯
0  S001  怠涵  女  23  山东
1  S002  婉清  女  25  河南
2  S003  溪榕  女  23  湖北
3  S004  漠涓  女  19  陕西
4  S005  祈博  女  24  山东

# 选择需要的列
df_sinfo = df_sinfo[['学号', '姓名', '性别']]
print(df_sinfo)
     学号  姓名 性别
0  S001  怠涵  女
1  S002  婉清  女
2  S003  溪榕  女
3  S004  漠涓  女
4  S005  祈博  女

##左表df_grade,右表df_sinfo, 左右两表都有相同列'学号',how=left表示以左表进行vlookup,右表中的V到左表中填充,sort表示是否排序,fillna表示V不到的空值填充

df_merged_2=(df_grade.merge(df_sinfo,on='学号',how = 'left',sort = 'false')).fillna(0)
print(df_merged_2)
    班级    学号  语文   数学  英语  姓名 性别
0  C01  S001  99   84  88  怠涵  女
1  C01  S002  66   95  77  婉清  女
2  C01  S003  68   68  61  溪榕  女
3  C01  S004  63   66  82  漠涓  女
4  C01  S005  72   95  94  祈博  女
5  C01  S006  80   97  97   0  0
6  C01  S007  78   95  90   0  0
7  C01  S008  56   99  89   0  0
8  C01  S009  66  100  97   0  0
9  C01  S010  89   99  67   0  0

相关文章:

  • STL——list的介绍和模拟实现
  • 【新手入门】SQL注入之getshell(木马)
  • Java之JVM内存模型
  • Linux - 进程
  • 运维Zabbix面试题及参考答案
  • 一、数据库 MySQL 基础学习 (上)
  • FineBI_实现求当日/月/年回款金额分析
  • LeetCode 2588.统计美丽子数组数目:前缀和 + 位运算(异或) + 哈希表
  • 自动化同步多服务器数据库表结构
  • 2025年渗透测试面试题总结-字某某动-安全研究实习生(二面)(题目+回答)
  • STL:C++的超级工具箱(一)
  • linux 系统内核查询
  • C++ 中前置 `++` 与后置 `++` 运算符重载
  • 【落羽的落羽 C++】C++入门基础:引用,内联,nullptr
  • 神经网络|(十二)|常见激活函数
  • 3.使用ElementUI搭建侧边栏及顶部栏
  • linux_c3.5
  • PDF 分割工具
  • C++中`const int*` 与 `int* const` 的区别及记忆技巧
  • Swift系列01-Swift语言基本原理与设计哲学
  • 网站建设公司那家好/广告宣传费用一般多少
  • 网站建设公司格/济南网络推广公司电话
  • 网站备案网址/荥阳seo
  • 网站建设化妆品的目录/一键生成app制作器
  • 做网站收费标准点击量/潍坊网站外包
  • 房产经济人怎么做网站/长沙百度