使用 python 中的 pandas 将数据写入现有 Excel

Writing Data to Existing Excel using pandas in python

目前,我正在将两个数据框导出到一个 excel 文件中。每个数据框都放在单独的 sheet 上。我目前正在 运行 进行模拟,每个数据框需要 2,000 列(每个 sheet 有 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

等等...

不幸的是,附加到 excel 并不是 pandas 中的完整功能。

在您的破解组合解决方案中,您可以使用 excel 编写器对象将工作表拼接在一起。

听起来您想为所有新数据(而不是行)添加列,因此您可能需要使用

来确定电子表格的宽度

maxcol = writer.sheets['SheetName'].max_column

** 编辑,我的错,是 max_column 而不是 max_col **

有关如何添加行的完整代码,请参阅 prior question from 2017

读取 excel 文件并将其存储为数据帧并附加系列并写入相同的 excel sheet

# read wherever you have stored the file

prev_df = pd.read_excel('path to file.xlsx')

# convert new series to df
new_df =  pd.DataFrame(var1)

# join
df_to_write = prev_df.join(new_df)

# write to excel