1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 『Python』『Pandas/Xlwings』如何不覆盖已有工作表 把新数据写入新的Excel工作表

『Python』『Pandas/Xlwings』如何不覆盖已有工作表 把新数据写入新的Excel工作表

时间:2023-02-11 14:47:38

相关推荐

『Python』『Pandas/Xlwings』如何不覆盖已有工作表 把新数据写入新的Excel工作表

e n v : env: env:

p a n d a s : 1.3.0 \space \space \space pandas: \space 1.3.0 pandas:1.3.0

x l s i n g s : 0.22.2 \space \space \space xlsings: \space 0.22.2 xlsings:0.22.2

以前我总是用 x l w i n g s xlwings xlwings 把处理好的 D a t a F r a m e DataFrame DataFrame 写进 E x c e l Excel Excel,但我发现虽然很方便,但写入速度较慢,所以一直在抱怨为啥 P a n d a s Pandas Pandas 的 t o _ e x c e l to\_excel to_excel 函数这么拉,一写入就覆盖了原本存在的工作表,所以最近抽空就看了下 p a n d a s . t o _ e x c e l pandas.to\_excel pandas.to_excel 这个方法,发现原来是我火星了,它也支持不覆盖写入并且写入速度比 X l w i n g s Xlwings Xlwings快好多倍, p a n d a s pandas pandas 永远滴神!!😛

Last updated: \space/10/21

未写入前 e x c e l excel excel 内的样子:

X l w i n g s Xlwings Xlwings

import xlwings as xwimport timeclass Xlwings:@classmethoddef write(cls, file_path, sheet_name, df_name):app = xw.App(visible=False, add_book=False)app.display_alerts = Falseapp.screen_updating = Falsewb = app.books.open(file_path)try:wb.sheets.add(sheet_name)except ValueError:wb.sheets[sheet_name].delete()wb.sheets.add(sheet_name)wb.sheets[sheet_name].range('A1').options(pd.DataFrame, index=False).value = df_namewb.save(file_path)wb.close()app.quit()start = time.time()# 写入一个很简单的dfdf = pd.DataFrame(columns=['Col_a', 'Col_b'], data=[[6, 6], [5, 8]])Xlwings.write(file_path=r'C:\testing\Testing.xlsx', sheet_name='Sheet_3', df_name=df)print('Used time: ', time.time() - start)

X l w i n g s Xlwings Xlwings 的耗时

写入效果

然后我手动删除 S h e e t _ 3 Sheet\_3 Sheet_3 后保存,并用 p a n d a s pandas pandas 重新写入

P a n d a s Pandas Pandas

class Pandas:@classmethoddef write(cls, file_path, sheet_name, df_name):writer = pd.ExcelWriter(file_path, mode='r+')df_name.to_excel(writer, sheet_name=sheet_name, index_label=False, index=False)writer.save()

start = time.time()df = pd.DataFrame(columns=['Col_a', 'Col_b'], data=[[6, 6], [5, 8]])Pandas.write(file_path=r'C:\testing\Testing.xlsx', sheet_name='Sheet_3', df_name=df)print('Used time: ', time.time() - start)writer.save()

p a n d a s pandas pandas 的耗时

p a n d a s pandas pandas 的写入效果

不难发现 p a n d a s pandas pandas 不仅写入得更快,而且它还细心地给你的 h e a d e r header header 加粗还加了框线,我踏马吹爆好吧 ❤️

不过虽说 X l w i n g s Xlwings Xlwings 写入慢,但它能调用微软的 a p i api api 接口,做到很多 p a n d a s pandas pandas 做不到的事情(如格式设置、绘制图表等方面),所以在 E x c e l Excel Excel 自动化办公这一块,有些时候两者互补才是最优解

更新 更新 更新

把脚本交付给 u s e r user user 后,发现可能由于 u s e r user user 的电脑性能较差,响应速度较慢(排除了环境的问题),上面的Pandas.write方法失效,该方法依然会清空已有工作表, 所以改进了下方法

使用with代码块,保证文件的正常关闭与保存

# 🔺:if_sheet_exists参数有几种选项{‘error’, ‘new’, ‘replace’, ‘overlay’}, 默认为‘error’# 该参数只有在pandas版本 ≥ 1.3.0 时才生效class Pandas:@classmethoddef write(cls, file_path, sheet_name, df_name):with pd.ExcelWriter(file_path, engine='openpyxl', mode='a', if_sheet_exists='replace') as writer:df_name.to_excel(writer, sheet_name=sheet_name, index=False, index_label=False)

若要“同时”写入多个工作表,也可以这样写:

with pd.ExcelWriter(file_path) as writer:df_1.to_excel(writer, sheet_name='Sheet_1', index=False, index_label=False)df_2.to_excel(writer, sheet_name='Sheet_2', index=False, index_label=False)

\space \space \space \space \space \space \space相关链接

『Python - Xlwings』Excel报表自动化中常用函数/方法『Python - Xlwings』如何方便快捷地在Excel中输入附带单元格格式的DataFrame『Python』Excel文件的读取以及DataFrame的相关操作 (4)—— 常用查询语句

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。