当前,我正在将两个数据帧导出到单个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
以此类推...
答案 0 :(得分:0)
不幸的是,追加到excel并不是熊猫的完整功能。
对于一起被黑客入侵的解决方案,您可以使用excel writer对象将工作表缝合在一起。
听起来您想为所有新数据添加列(而不是行),所以您可能需要使用
确定电子表格的宽度 maxcol = writer.sheets['SheetName'].max_column
**编辑,我不好,是max_column
而不是max_col
**
有关如何添加行的完整代码,请参考prior question from 2017。
答案 1 :(得分:0)
读取excel文件并将其存储为数据框,然后附加系列并将其写入相同的excel工作表
# 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