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

前言:今天遇到个问题,项目上有个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。

posted @ 2022-05-18 20:02  流沙浩荡  阅读(665)  评论(0)    收藏  举报