You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 03:38:14