如何实现单XLSX多工作表转对应命名DataFrame并处理重复后导出
解答:Excel多工作表的DataFrame处理方案
当然可以实现将单个XLSX文件里的多个工作表读取为对应名称的DataFrame!下面我会给出一个实用的Python函数,完美覆盖你提到的所有需求,还附带详细的使用说明和注释。
实现思路
- 用
pandas的ExcelFile一次性读取整个Excel文件,高效获取所有工作表的名称与数据 - 针对每个工作表,按配置保留指定列,将目标列拼接成新的
concat列 - 通过判断拼接值的出现频次,生成自定义名称的重复标记列(比如示例里的
is duplicate或has duplicate) - 最后用
ExcelWriter把所有处理后的DataFrame写入同一个工作簿的对应工作表中
完整代码实现
import pandas as pd def process_excel_multisheets(input_file, output_file, sheet_config): """ 处理Excel多工作表,生成带拼接列和重复标记的DataFrame,并写入新Excel文件 参数: input_file (str): 输入Excel文件路径 output_file (str): 输出Excel文件路径 sheet_config (dict): 工作表配置字典,键为工作表名称,值为字典: { 'keep_cols': list, 需要保留的列名列表(用于拼接的列必须在其中) 'concat_cols': list, 需要拼接的列名列表(顺序影响拼接结果) 'duplicate_col_name': str, 重复标记列的名称(如'is duplicate') } """ # 读取整个Excel文件,避免重复打开提升效率 xls = pd.ExcelFile(input_file) # 创建Excel写入器,统一写入结果 with pd.ExcelWriter(output_file) as writer: # 遍历每个工作表 for sheet_name in xls.sheet_names: # 读取当前工作表数据 df = pd.read_excel(xls, sheet_name=sheet_name) # 获取当前工作表的处理配置 config = sheet_config.get(sheet_name) if not config: # 无配置时直接写入原数据(可根据需求调整逻辑) df.to_excel(writer, sheet_name=sheet_name, index=False) continue # 保留指定列,避免冗余数据 df_processed = df[config['keep_cols']].copy() # 生成拼接列:将指定列转成字符串后按顺序拼接,用下划线分隔(可自定义分隔符) df_processed['concat'] = df_processed[config['concat_cols']].astype(str).agg('_'.join, axis=1) # 标记重复值:所有重复的行都标记为'Yes',否则为'No' df_processed[config['duplicate_col_name']] = df_processed['concat'].duplicated(keep=False).map({True: 'Yes', False: 'No'}) # 将处理后的结果写入对应工作表 df_processed.to_excel(writer, sheet_name=sheet_name, index=False) # ------------------- 匹配你需求的使用示例 ------------------- if __name__ == "__main__": # 为每个工作表单独配置处理规则 sheet_config = { 'sheet1': { 'keep_cols': ['c', 'd'], 'concat_cols': ['c', 'd'], 'duplicate_col_name': 'is duplicate' }, 'sheet2': { 'keep_cols': ['e', 'f'], 'concat_cols': ['e', 'f'], 'duplicate_col_name': 'has duplicate' } } # 调用函数完成处理 process_excel_multisheets( input_file='your_input_file.xlsx', output_file='your_output_file.xlsx', sheet_config=sheet_config )
关键细节说明
- 高效读取:用
ExcelFile一次性加载整个文件,比单独读取每个工作表更高效,适合大文件处理 - 灵活拼接:拼接时可以自定义分隔符(比如把
'_'改成','或空格),如果有缺失值,可提前用fillna('')替换成空字符串避免出现nan - 重复标记逻辑:
duplicated(keep=False)会标记所有重复行(包括第一次出现的),如果你只想标记非首次出现的重复项,把keep=False改成keep='first'即可 - 依赖安装:确保已经安装
pandas和openpyxl(用于读写xlsx文件),没安装的话运行pip install pandas openpyxl即可
内容的提问来源于stack exchange,提问作者learningtocode
相关产品推荐
相关产品推荐

