【发布时间】:2020-01-13 15:40:20
【问题描述】:
目前,我正在将两个数据框导出到一个 Excel 文件中。每个数据框都放置在单独的工作表上。我目前正在运行模拟,每个数据框需要 2,000 列(每张纸上 2,000 列)。每次我运行我的代码时,它都会创建一个新的 excel 文件(我最初想要的)。但是为了节省时间,我想知道是否可以通过添加新的数据列而不覆盖现有数据来写入现有的 excel 文件?
######### This is my original code ################
import pandas as pd
from pandas import ExcelWriter
from pandas import ExcelFile
from pandas import DataFrame
from openpyxl import Workbook
df1 = pd.DataFrame(returns1)
df2 = pd.DataFrame(returns2)
x1 = 'mypath/ '
x2 = datetime.datetime.now().strftime('%B %d, %Y %H-%M-%S')
x3 = '.xlsx'
destination = x1 + x2 + x3
writer = pd.ExcelWriter(destination, engine='xlsxwriter')
df1.to_excel(writer, sheet_name= 'Returns 1', index=False)
df2.to_excel(writer, sheet_name= 'Returns 2', index=False)
writer.save()
### 更新
代码有效!感谢所有提供帮助的人,尤其是@zhqiat。下面是最终代码。正是我想要的。我希望这将帮助其他遇到与我相同的问题的人。
df1 = pd.DataFrame(returns1)
df2 = pd.DataFrame(returns2)
book = load_workbook('mypath.xlsx')
writer = pd.ExcelWriter('mypath.xlsx', engine='openpyxl')
writer.book = book
writer.sheets = {ws.title: ws for ws in book.worksheets}
df1.to_excel(writer, sheet_name='Returns1', startrow=0, startcol=writer.sheets['Returns1'].max_column, index=False)
df2.to_excel(writer, sheet_name='Returns2', startrow=0, startcol=writer.sheets['Returns2'].max_column, index=False)
This is what I wanted.
A
100
120
119
225
Second Time
A B
100 98
120 100
119 105
125 111
Third Time
A B C
100 98 106
120 100 99
119 105 101
125 111 89
等等……
【问题讨论】:
-
Please also forgive me as I am fairly new to python.你写了一个很好的问题,格式正确,方式准确。遵守 StackOverflow 行为准则,无需道歉。 -
为什么不直接读取 excel 文件并将其存储为数据框并附加系列并写入同一个 excel 表?
-
@aunsid 你能举例说明我是如何做到的吗?
-
只需使用 openpyxl 函数将数据帧转换为行。
-
您在没有必要也没有动态循环的情况下循环工作簿中的工作表。在
for sheetname in writer.sheets:循环中,您正在将 df1 和 df2 的输出写入工作表。但是对于工作簿中的每个工作表,您都执行相同的命令(没有任何更改),这就是您的输出最终被复制的方式。
标签: python excel pandas dataframe openpyxl