ExcelWriter append模式无法使用,pandas 0.23.4无法更新求替代方案
针对pandas 0.23.4 ExcelWriter append模式失效的替代方案
方案1:直接用openpyxl操作现有工作簿
pandas 0.23.4的ExcelWriter append模式存在已知bug,可绕过pandas封装,直接用openpyxl库实现追加写入:
from openpyxl import load_workbook import pandas as pd # 准备要写入的新数据 new_data = pd.DataFrame({'col1': [1,2,3], 'col2': ['a','b','c']}) excel_path = 'your_target_file.xlsx' # 加载现有Excel工作簿 book = load_workbook(excel_path) writer = pd.ExcelWriter(excel_path, engine='openpyxl') # 关联已加载的工作簿和工作表 writer.book = book writer.sheets = {ws.title: ws for ws in book.worksheets} # 获取目标工作表,计算写入起始行(避免覆盖已有内容) target_sheet = writer.sheets['Sheet1'] start_row = target_sheet.max_row # 写入新数据(不重复写入表头) new_data.to_excel(writer, sheet_name='Sheet1', startrow=start_row, header=False, index=False) writer.save() writer.close()
注意:确保openpyxl版本和pandas 0.23.4兼容,建议使用2.5.x系列版本
方案2:读取现有数据合并后重新写入
如果文件数据量不大,这种方法简单直接:
import pandas as pd excel_path = 'your_target_file.xlsx' new_data = pd.DataFrame({'col1': [1,2,3], 'col2': ['a','b','c']}) # 读取原有数据并合并 try: existing_data = pd.read_excel(excel_path) combined_data = pd.concat([existing_data, new_data], ignore_index=True) except FileNotFoundError: # 若文件不存在,直接用新数据 combined_data = new_data # 整体写入文件 combined_data.to_excel(excel_path, index=False)
缺点:数据量大时会占用较多内存,频繁读写效率偏低
方案3:针对xls格式用xlwt+xlutils扩展
如果操作的是.xls格式文件,可借助xlutils实现追加:
import pandas as pd from xlwt import Workbook from xlutils.copy import copy import xlrd excel_path = 'your_target_file.xls' new_data = pd.DataFrame({'col1': [1,2,3], 'col2': ['a','b','c']}) try: # 读取现有xls文件 rb = xlrd.open_workbook(excel_path, formatting_info=True) wb = copy(rb) ws = wb.get_sheet(0) start_row = rb.sheet_by_index(0).nrows except FileNotFoundError: # 文件不存在时新建工作簿 wb = Workbook() ws = wb.add_sheet('Sheet1') start_row = 0 # 先写入表头 for col_idx, col_name in enumerate(new_data.columns): ws.write(start_row, col_idx, col_name) start_row += 1 # 逐行写入新数据 for row_idx, row in new_data.iterrows(): for col_idx, value in enumerate(row): ws.write(start_row + row_idx, col_idx, value) wb.save(excel_path)
注意:xlwt仅支持xls格式,且单工作表最大行数限制为65536
内容的提问来源于stack exchange,提问作者moqa
相关产品推荐
相关产品推荐

