如何使用Pandas删除Excel工作簿各工作表中数据重复的列?
处理Excel多工作表重复列的解决方案
嘿,这个需求我之前帮同事处理过,用Pandas完全可以轻松搞定,分四步走就行,我给你把代码和逻辑都讲清楚:
1. 读取整个Excel工作簿
首先我们要把所有工作表都读进来,用pd.read_excel()加上sheet_name=None参数,这样会返回一个字典——键是工作表名称,值是对应工作表的DataFrame。
import pandas as pd # 读取整个工作簿,得到{工作表名: DataFrame}的字典 excel_dict = pd.read_excel("你的文件路径.xlsx", sheet_name=None)
2. 定义处理单个工作表的核心函数
核心逻辑是:把DataFrame转置(列变行),然后删除重复的行(也就是原来的重复列),再转置回原结构。这里用keep='first'表示保留第一个出现的列,删掉后面重复的(刚好符合你例子里留2014删2016的需求)。
def remove_duplicate_columns(df): # 转置后删除重复行,再转置回原结构,保留第一个出现的列 return df.T.drop_duplicates(keep='first').T
3. 遍历所有工作表批量处理
循环刚才得到的字典,对每个工作表应用上面的函数,生成处理后的新字典:
# 处理每个工作表,保存到新字典 processed_excel_dict = {sheet_name: remove_duplicate_columns(df) for sheet_name, df in excel_dict.items()}
4. 将处理后的工作表保存回Excel
用pd.ExcelWriter来批量写入所有工作表,注意要设置engine='openpyxl'(针对xlsx格式)避免格式丢失:
# 写入处理后的工作簿 with pd.ExcelWriter("处理后的文件路径.xlsx", engine='openpyxl') as writer: for sheet_name, df in processed_excel_dict.items(): df.to_excel(writer, sheet_name=sheet_name, index=False)
额外小Tips
- 这个方法不关心列名是否相同,只要数据内容完全一致就会被判定为重复列,完美匹配你的需求;
- 如果想保留最后一个出现的列,只需要把
keep='first'改成keep='last'就行; - 如果你的Excel是xls格式,把
engine='openpyxl'换成engine='xlwt'即可。
内容的提问来源于stack exchange,提问作者Mazin
相关产品推荐
相关产品推荐

