使用Python Pandas合并Excel表格:填充空值合并失败求助
用第二个Excel文件填充第一个文件的空单元格
你的需求是以第一个Excel为基础,用第二个文件的非空值填充对应索引行的空单元格,核心是基于索引匹配后填充空值,而非拼接或合并行/列。
现有代码的问题
pd.concat是纵向拼接两个DataFrame的行,会把两个文件的行全部保留,出现重复索引的行(比如示例中的1a、1b),完全不符合填充需求。- 你尝试的
pd.merge参数不全,且merge的作用是按列/索引合并数据,会生成重复列(比如B_x、B_y),并非用来填充空值的工具。
正确实现方法
使用pandas的combine_first方法,它的逻辑正好是:保留第一个DataFrame的所有非空值,用第二个DataFrame中对应索引和列的非空值填充第一个的空值,完美匹配你的需求。
完整代码:
import pandas as pd import os inputFolder = r'd:/testin' outputFolder = r'd:/testout' # 读取文件,指定首列为索引 file1 = pd.read_excel(os.path.join(inputFolder, 'input1.xlsx'), index_col=0) file2 = pd.read_excel(os.path.join(inputFolder, 'input2.xlsx'), index_col=0) # 用file2的非空值填充file1的空单元格 merged = file1.combine_first(file2) # 保存结果,保留索引列 merged.to_excel(os.path.join(outputFolder, 'merged.xlsx'), index=True)
效果验证
运行后会得到你期望的结果:
- 索引1的C列空值被file2的C1填充,D列保留file1的D1
- 索引2的D列空值被file2的D2填充,B、C列保留file1的B2、C2
- 所有原有非空值都不会被覆盖
内容的提问来源于stack exchange,提问作者BenK
相关产品推荐
相关产品推荐

