现有Excel工作簿生成DataFrame遇xlwt废弃报错及处理合并需求
解决pandas写入xls报错及优化Excel工作表处理流程
问题根源
你的脚本报错ValueError: No engine for filetype: 'xls',是因为xlwt包已停止维护,pandas不再默认支持用它写入.xls格式文件。而且原流程里把每个工作表存成单独.xls文件再重新读取,完全是冗余步骤,既浪费时间又容易出问题。
优化后的完整代码
直接跳过中间文件,一次性读取所有工作表到DataFrame,处理后直接合并到新工作簿:
1. 读取原工作簿的所有工作表
import pandas as pd import time # 读取原工作簿,直接获取所有工作表的DataFrame字典 excel_file = pd.ExcelFile('Workbook1.xlsx') sheet_dfs = {sheet: pd.read_excel(excel_file, sheet_name=sheet) for sheet in excel_file.sheet_names}
2. 处理每个DataFrame
替换成你实际的处理逻辑,示例如下:
# 处理sheet1:移除空值 sheet_dfs['sheet1'] = sheet_dfs['sheet1'].dropna() # 处理sheet2:新增计算列 sheet_dfs['sheet2']['new_column'] = sheet_dfs['sheet2']['old_column'] * 2 # 处理sheet3:重命名列 sheet_dfs['sheet3'] = sheet_dfs['sheet3'].rename(columns={'old_name': 'new_name'})
3. 将处理后的DataFrame写入新工作簿
# 用openpyxl引擎写入xlsx格式(需先安装:pip install openpyxl) with pd.ExcelWriter(f"New Workbook {time.strftime('%m-%d-%Y')}.xlsx", engine='openpyxl') as writer: for sheet_name, df in sheet_dfs.items(): df.to_excel(writer, sheet_name=sheet_name, index=False)
关键说明
- 取消中间.xls文件生成步骤,直接在内存中处理DataFrame,效率更高
- 使用
openpyxl是pandas当前推荐的Excel写入引擎,适配xlsx格式,稳定性更好 - 若确实需要生成.xls格式,可安装旧版xlrd(但不推荐,因xlrd已停止对xlsx格式的支持),优先改用xlsx格式更稳妥
内容的提问来源于stack exchange,提问作者Molly Welsh
相关产品推荐
相关产品推荐

