根据https://github.com/pandas-dev/pandas/pull/21251/files/09e5b456e1af5cde55f18f903ab90c761643b05a,我们应该能够将DataFrames附加到新的XLSX表。
根据文档,我尝试了以下内容:
>>> import pandas as pd
>>>
... d1 = pd.DataFrame({"A":['Bob','Joe', 'Mark'],
... "B":['5', '10', '20']})
>>> d2 = pd.DataFrame({"A":['Jeffrey','Ann', 'Sue'],
... "B":['1', '2', '3']})
>>>
>>> # Create XLSX document for ticker
... writer = pd.ExcelWriter('test.xlsx',engine='openpyxl')
>>> d1.to_excel(writer,sheet_name='d1')
>>> writer.save()
>>>
>>> writer = pd.ExcelWriter('test.xlsx',engine='openpyxl', mode='a')
>>> d2.to_excel(writer,sheet_name='d2')
>>> writer.save()
>>>
>>> pd.__version__
'0.23.4' # Just updated this per a comment
>>>
>>>
结果是一个名为“test.xlsx”的工作簿,其中包含一个标签“d2”。
如何防止覆盖工作簿/表单?
你可以使用with
:
with pd.ExcelWriter('test.xlsx', engine='openpyxl', mode='a') as writer:
d1.to_excel(writer,sheet_name='d1')
d2.to_excel(writer,sheet_name='d2')
writer.save()
writer.close()
这应该只需要注意一个空白文件需要事先创建。如果需要,您可以使用python创建一个空白文件。我创建了一个简单的循环,在某些方面,模仿了你想要完成的事情的本质:
import pandas as pd
from openpyxl import load_workbook
d1 = pd.DataFrame({"A":['Bob','Joe', 'Mark'],
"B":['5', '10', '20']})
d2 = pd.DataFrame({"A":['Jeffrey','Ann', 'Sue'],
"B":['1', '2', '3']})
dfs = [d1,d2]
for i in range(len(dfs)):
sheet = 'd'+str(i+1)
data = dfs[i]
writer = pd.ExcelWriter('atest.xlsx',engine='openpyxl', mode='a')
writer.book = load_workbook('atest.xlsx') # here is the difference
data.to_excel(writer,sheet_name=sheet)
writer.save()
writer.close()
或者这是修改后的第一个例子:
d1 = pd.DataFrame({"A":['Bob','Joe', 'Mark'],
"B":['5', '10', '20']})
d2 = pd.DataFrame({"A":['Jeffrey','Ann', 'Sue'],
"B":['1', '2', '3']})
writer = pd.ExcelWriter('atest.xlsx', engine='openpyxl', mode='w')
d1.to_excel(writer,sheet_name='d1')
writer.save()
writer.close()
writer = pd.ExcelWriter('atest.xlsx', engine='openpyxl', mode='a')
writer.book = load_workbook('atest.xlsx')
d2.to_excel(writer,sheet_name='d2')
writer.save()
writer.close()
我在GitHub上提交了一篇帖子,并收到了贡献者的回复(见下面突出显示的部分)。事实证明,直到0.24
才会发布此功能,因此它在0.23.1
中不可用。仅供参考 - 我下载了RC并成功试用了mode='a'
option。但是,可能存在不存在的工作簿的错误;我收到FileNotFoundError: [Errno 2] No such file or directory: 'test.xlsx'
。
“这个功能是作为0.24的一部分发布的,我们刚刚发布了过去几天的候选版本。你可以尝试使用RC或者这里的主人,如果两个工作都没有根据贡献指南打开一个问题,但这不会'预期可以使用早于那个版本的版本“
将pandas导入为pd
writer = pd.ExcelWriter(wk_path + save_file)
# ....
# build sc_files DataFrame and save. sc_files includes
# a column called OS.
sc_file.to_excel(writer, sheet_name='test')
# build data frame of OS counts out of sc_file
counts_os = sc_file.OS.value_counts()
# To append to 'test' sheet, use startcol=x1, startrow=y
# To append counts_OS to the end of the current 'test' sheet
y = len(sc_file)
y += 1
counts_os.to_excel(writer, sheet_name='test',
startcol=1, startrow=y)
# write counts_os to sheet test2
counts_os.to_excel(writer, sheet_name='test2')
writer.save()
writer.close()