【python-pandas】利用pandas操作Excel.xlsx数据,写入可覆盖,无法追加数据(版本过低)(踩坑)

在项目中,使用pandas的to_excel()函数尝试追加Excel数据时遇到问题,发现0.23版本的pandas不支持追加模式。升级到高版本后,需依赖openpyxl并设置mode='a'才能实现追加。此外,升级pandas可能引发其他库的版本冲突,如numpy和openpyxl。最终决定在无法升级生产环境的情况下研究openpyxl来解决问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:今天遇到个问题,项目上有个Excel输出文件需要进行二次读写,对已存在的.xlsx文件追加一张sheet表,但是实际操作过程中发现利用pandas.to_excel()操作失败,只能覆盖原数据,无法追加,最后发现是,版本库的问题,项目上pandas是0.23,而最新的官方文档为1.42,在本地升级后可以追加,但生产服务器无法随意动库,故准备转战openpyxl(能否成功正在研究…)。
总结:如果用pandas追加Excel数据请使用高版本,低版本无法追加数据,同时依赖openpyxl包。
官档1:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_excel.html

此处问题处理相关摘要:
关键词:ExcelWriter\ to_excel\ openpyxl\ mode

新建测试文件:
需要使用ExcelWriter

参考:(官档1)
对新文件进行创建:
with pd.ExcelWriter(‘output.xlsx’) as writer:
df1.to_excel(writer, sheet_name=‘Sheet_name_1’, index=False)
df2.to_excel(writer, sheet_name=‘Sheet_name_2’,index=False )
###注:此处df1与df2皆为已设好的DataFrame数据,df的index可以关闭

对已有Excel.xlsx文件进行读取:
df = pd.read_excel(’ input.xlsx’, sheet_name=‘Sheet1’)

对outpuy.xlsx进行追加(注意有坑,mode= 'a’代表追加,'w’代表覆盖):
with pd.ExcelWriter(‘output.xlsx’,engine=‘openpyxl’ , mode=‘a’) as writer:
df.to_excel(writer, sheet_name=‘Sheet_name_3’)

坑就坑在:
1.如果不写engine=‘openpyxl’ ,恰好版本又过低,会提示没有mode关键字,默认是’xlsxwriter’(不可追加),同时官方文档也没加(深坑)。
2.加上engine=‘openpyxl’ 后,不报错了,但是无论你将mode='a’改为任何形式(mod=‘a’,或者mo=‘a’),都不会报错,让你丈二摸不着头脑,原因是版本过低。
3.用pip升级pandas版本,发现openpyxl与numpy需要也升,升级之后即可使用上述语句。注意,此处有坑,因为项目用版本老,本地升级后有个莫名错误,numexpr不见了,重新用pip安装发现numexpr在最新版本,但是conda查询还在原版本,同时用pd.show_versions()查询显示None(阔怕的是pymysql模块也显示None)。
感觉莫名其妙同时很无奈,还好是本地,当最后发现不能升级服务器版本,我选择退而其次去研究openpyxl。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值