把许多pythonpandas数据框放到一个excel工作表中
只要是不同的工作表,将许多pandas数据框添加到Excel工作簿中是相当容易的。 但是,如果要使用“pandas”内置的df.to_excelfunction,将多个数据框合并到一个工作表中会有些棘手。
# 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)
上面的代码将不起作用。 你会得到错误的
Sheetname 'Validation', with case ignored, is already in use.
现在,我已经做了足够的尝试,find了一种使其工作的方法。
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)
这将工作。 所以,我在stackoverflow上发布这个问题的目的是双重的。 首先,我希望这将帮助某人,如果他/她在Excel中试图将许多数据框放在一个工作表中。
其次,有人能帮我理解这两个代码块之间的区别吗? 在我看来,他们几乎是相同的,除了第一块代码创build工作表提前“validation”,而第二块没有。 我得到那部分。
我不明白的是为什么它有什么不同呢? 即使我不提前创build工作表,这行,最后一行之前,
df.to_excel(writer,sheet_name='Validation',startrow=0 , startcol=0)
将无论如何创build一个工作表。 因此,当我们到达最后一行代码时,工作表“validation”已经在第二代码块中创build了。 所以,我的问题基本上,为什么第二个代码块的工作,而第一个不?
如果还有其他方法可以使用内置的df.to_excelfunction将许多数据框放入excel,也请分享!
user3817518:“如果还有其他方法可以使用内置的df.to_excelfunction将多个数据框放入excel,也请分享!
这是我的尝试:
简单的方法就是将很多数据框放在一张或多张标签上。 让我知道这个是否奏效!
– 要testing,只需运行示例数据框和代码的第二和第三部分即可。
示例数据框
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))
将多个数据框放入一个xlsx表单中
# 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)
将多个数据框放在单独的选项卡/表单中
# 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')
要预先创build工作表,您需要将创build的工作表添加到工作表中:
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)
说明
如果我们看一下pandas函数to_excel
,它使用writer的write_cells
函数:
excel_writer.write_cells(formatted_cells, sheet_name, startrow=startrow, startcol=startcol)
所以看着write_cells
函数:
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
在这里我们可以看到它检查sheet_name
中的self.sheets
,所以它也需要在那里添加。
我会更倾向于首先连接dataframe,然后将该dataframe转换为Excel格式。 把两个数据框并排放在一起(而不是一个放在另一个上面):
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) new_df = pd.concat([df, another_df], axis=1) new_df.to_excel(writer,sheet_name='Validation',startrow=0 , startcol=0)