【发布时间】:2017-12-26 11:27:48
【问题描述】:
我有一段时间前的代码,我正在重新用于一项新任务。任务是将新的 DataFrame 写入新工作表,写入现有的 excel 文件。但是有一部分代码我不明白,但它只是让代码“工作”。
工作:
from openpyxl import load_workbook
import pandas as pd
file = r'YOUR_PATH_TO_EXCEL_HERE'
df1 = pd.DataFrame({'Data': [10, 20, 30, 20, 15, 30, 45]})
book = load_workbook(file)
writer = pd.ExcelWriter(file, engine='openpyxl')
writer.book = book # <---------------------------- piece i do not understand
df1.to_excel(writer, sheet_name='New', index=None)
writer.save()
writer.book=book 的那一行字把我难住了。如果没有那段代码,Excel 文件将删除所有其他工作表,df1.to_excel 中的sheetname= 参数中使用的工作表除外。
我查看了xlsxwriter's 文档以及openpyxl's,但似乎无法弄清楚为什么该行给了我预期的输出。有什么想法吗?
编辑:我相信this post 是我最初想法的来源。
【问题讨论】:
-
如果你不指定这本书已经有数据,我认为熊猫只会使用 writer 将数据写入新书,从而覆盖现有书。
-
我不知道有办法防止 pandas 覆盖整个工作簿。很高兴知道这一点!
-
@saintsfan342000 很高兴我能帮上忙!我认为这也很整洁。现在它只是深入了解为什么它会起作用,以及在我弄清楚这一点后如何扩展它!
-
在理解是怎么回事方面,值得注意的是,没有“指定书本已有数据”之类的东西。即使您使用的是 Microsoft 的正版 Excel 程序,每次保存时,它总是写入一个完全全新的文件。 碰巧新文件可以与旧文件具有完全相同的名称,在这种情况下,它似乎文件已“更新” ,但实际上旧文件已被新文件覆盖。
标签: python excel pandas openpyxl xlsxwriter