使用 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
目前,我正在将两个数据框导出到一个 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