如何基于共有列合并两个Excel文件生成含全量有序信息的新文件
解决方案
你原本的嵌套循环写法不仅执行效率极低,逻辑也存在问题(for x in df1实际是遍历表的列名而非行数据),Pandas提供了原生的merge方法专门实现基于公共列的多表匹配合并,无需手动遍历匹配。
可直接运行的正确代码
import pandas as pd # 读取两个源Excel文件 df1 = pd.read_excel(r'C:/Users/User/Desktop/UTP/Trabajo Alvaro_Christian/CE.xlsx') df2 = pd.read_excel(r'C:/Users/User/Desktop/UTP/Trabajo Alvaro_Christian/Matricula.xlsx') # 按公共列合并两个表 merged_df = pd.merge( left=df1, right=df2, # 此处填入你3个公共列的列名,已按你代码里的两个列示例,第三个自行补充 on=['COD_PERIODO', 'TERCERO', '第三个公共列的列名'], how='inner' ) # 导出合并结果,index=False表示不把Pandas的行索引写入Excel merged_df.to_excel('FinalData.xlsx', index=False)
参数说明
on参数:传入所有用来做匹配依据的公共列名列表,要求两个表中这些列的列名完全一致;如果两个表的匹配列名不同,可以用left_on和right_on分别指定左右表对应的匹配列how参数:控制合并时的行保留规则,常用可选值:inner:默认值,只保留两个表公共列值完全匹配的行,也就是取两个表的交集left:保留左侧df1的所有行,右侧df2匹配不到的位置自动填充空值right:保留右侧df2的所有行,左侧df1匹配不到的位置自动填充空值outer:保留两个表的所有行,匹配不到的位置自动填充空值
如果你发现合并后匹配到的行数远低于预期,优先检查公共列的数据格式是否一致,比如一个表的
COD_PERIODO是数字类型、另一个是字符串类型会导致匹配失败,统一格式后再合并即可。
内容的提问来源于stack exchange,提问作者Juan Alejandro Orozco Ospina
相关产品推荐
相关产品推荐

