nya*_*4sn 39 python excel dataframe pandas xlsxwriter
只要是不同的工作表,就可以很容易地将许多pandas数据帧添加到excel工作簿中.但是,如果要使用pandas内置的df.to_excel功能,将许多数据帧放入一个工作表中有点棘手.
# Creating Excel Writer Object from Pandas
writer = pd.ExcelWriter('test.xlsx',engine='xlsxwriter')
workbook=writer.book
worksheet=workbook.add_worksheet('Validation')
df.to_excel(writer,sheet_name='Validation',startrow=0 , startcol=0)
another_df.to_excel(writer,sheet_name='Validation',startrow=20, startcol=0)
Run Code Online (Sandbox Code Playgroud)
上面的代码不起作用.你会得到错误的
Sheetname 'Validation', with case ignored, is already in use.
Run Code Online (Sandbox Code Playgroud)
现在,我已经进行了足够的实验,我发现了一种方法可以使它工作.
writer = pd.ExcelWriter('test.xlsx',engine='xlsxwriter') # Creating Excel Writer Object from Pandas
workbook=writer.book
df.to_excel(writer,sheet_name='Validation',startrow=0 , startcol=0)
another_df.to_excel(writer,sheet_name='Validation',startrow=20, startcol=0)
Run Code Online (Sandbox Code Playgroud)
这会奏效.所以,我在stackoverflow上发布这个问题的目的是双重的.首先,我希望如果他/她试图将许多数据帧放在excel的单个工作表中,这将有助于某人.
其次,有人可以帮助我理解这两个代码块之间的区别吗?在我看来它们几乎是相同的,除了第一块代码创建的工作表提前称为"验证"而第二块没有.我得到那个部分.
我不明白的是为什么它会有所不同?即使我没有提前创建工作表,这一行,就在最后一行之前,
df.to_excel(writer,sheet_name='Validation',startrow=0 , startcol=0)
Run Code Online (Sandbox Code Playgroud)
无论如何都会创建一个工作表.因此,当我们到达最后一行代码时,工作表"验证"也已在第二个代码块中创建.那么,基本上我的问题是,为什么第二个代码块工作而第一个代码块没有?
如果有其他方法可以使用内置的df.to_excel功能将许多数据帧放入excel,请分享!
Adr*_*ian 30
要提前创建工作表,您需要将创建的工作表添加到sheetsdict:
writer.sheets['Validation'] = worksheet
使用原始代码:
# Creating Excel Writer Object from Pandas
writer = pd.ExcelWriter('test.xlsx',engine='xlsxwriter')
workbook=writer.book
worksheet=workbook.add_worksheet('Validation')
writer.sheets['Validation'] = worksheet
df.to_excel(writer,sheet_name='Validation',startrow=0 , startcol=0)
another_df.to_excel(writer,sheet_name='Validation',startrow=20, startcol=0)
Run Code Online (Sandbox Code Playgroud)
如果我们看一下pandas函数to_excel,它会使用writer的write_cells函数:
excel_writer.write_cells(formatted_cells, sheet_name, startrow=startrow, startcol=startcol)
Run Code Online (Sandbox Code Playgroud)
所以看看write_cells函数xlsxwriter:
def write_cells(self, cells, sheet_name=None, startrow=0, startcol=0):
# Write the frame cells using xlsxwriter.
sheet_name = self._get_sheet_name(sheet_name)
if sheet_name in self.sheets:
wks = self.sheets[sheet_name]
else:
wks = self.book.add_worksheet(sheet_name)
self.sheets[sheet_name] = wks
Run Code Online (Sandbox Code Playgroud)
在这里我们可以看到它检查sheet_name进来self.sheets,因此它也需要在那里添加.
Tom*_*bbs 27
user3817518:"如果有其他方法可以使用内置的df.to_excel功能将许多数据帧放入Excel中,请分享!"
这是我的尝试:
轻松地将大量数据框组合在一个工作表或多个选项卡上.让我知道这个是否奏效!
- 要进行测试,只需运行示例数据帧以及代码的第二和第三部分.
import pandas as pd
import numpy as np
# Sample dataframes
randn = np.random.randn
df = pd.DataFrame(randn(15, 20))
df1 = pd.DataFrame(randn(10, 5))
df2 = pd.DataFrame(randn(5, 10))
Run Code Online (Sandbox Code Playgroud)
# funtion
def multiple_dfs(df_list, sheets, file_name, spaces):
writer = pd.ExcelWriter(file_name,engine='xlsxwriter')
row = 0
for dataframe in df_list:
dataframe.to_excel(writer,sheet_name=sheets,startrow=row , startcol=0)
row = row + len(dataframe.index) + spaces + 1
writer.save()
# list of dataframes
dfs = [df,df1,df2]
# run function
multiple_dfs(dfs, 'Validation', 'test1.xlsx', 1)
Run Code Online (Sandbox Code Playgroud)
# function
def dfs_tabs(df_list, sheet_list, file_name):
writer = pd.ExcelWriter(file_name,engine='xlsxwriter')
for dataframe, sheet in zip(df_list, sheet_list):
dataframe.to_excel(writer, sheet_name=sheet, startrow=0 , startcol=0)
writer.save()
# list of dataframes and sheet names
dfs = [df, df1, df2]
sheets = ['df','df1','df2']
# run function
dfs_tabs(dfs, sheets, 'multi-test.xlsx')
Run Code Online (Sandbox Code Playgroud)
小智 11
Adrian 的答案可以简化如下
writer = pd.ExcelWriter('test.xlsx',engine='xlsxwriter')
df.to_excel(writer,sheet_name='Validation',startrow=0 , startcol=0)
another_df.to_excel(writer,sheet_name='Validation',startrow=20, startcol=0)
适用于0.25.3带有 python 的pandas3.7.6
sta*_*iet 10
使用with- 您不必明确调用writer.save()或writer.close()调用。
此外,workbook.close()如果您使用workbook=writer.book.
(其他答案忘记这样做,这种情况经常发生,因为我们是人类;)
import pandas as pd
df = pd.DataFrame(data={'col1':[9,3,4,5,1,1,1,1], 'col2':[6,7,8,9,5,5,5,5]})
df2 = pd.DataFrame(data={'col1':[25,35,45,55,65,75], 'col2':[61,71,81,91,21,31]})
with pd.ExcelWriter('test.xlsx', engine='xlsxwriter') as writer:
df.to_excel(writer, sheet_name='testSheetJ', startrow=1, startcol=0)
df2.to_excel(writer, sheet_name='testSheetJ', startrow=1+len(df)+3, startcol=0)
Run Code Online (Sandbox Code Playgroud)
如果您想将数据框写入不同的工作表中,只需执行以下操作:
with pd.ExcelWriter('test.xlsx', engine='xlsxwriter') as writer:
df.to_excel(writer, sheet_name='Sheet1')
df2.to_excel(writer, sheet_name='Sheet2')
Run Code Online (Sandbox Code Playgroud)
结果:
| 归档时间: |
|
| 查看次数: |
28015 次 |
| 最近记录: |