将许多python pandas数据帧放到一个excel工作表中

时间:2015-10-05 20:35:04

标签: python excel pandas dataframe 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) 

以上代码不起作用。您将收到错误

 Sheetname 'Validation', with case ignored, is already in use.

现在,我已经进行了足够的实验,我找到了一种方法让它发挥作用。

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的单个工作表中,这将有助于某人。

其次,有人可以帮助我理解这两个代码块之间的区别吗?在我看来,它们几乎是相同的,除了第一块代码创建的工作表称为"验证"提前而第二个没有。我得到那个部分。

我不明白为什么它会有所不同?即使我没有提前创建工作表,这一行,就在最后一行之前,

 df.to_excel(writer,sheet_name='Validation',startrow=0 , startcol=0)  

无论如何都会创建一个工作表。因此,当我们到达最后一行代码时,工作表"验证"已经在第二个代码块中创建了。那么,基本上我的问题是,为什么第二个代码块在第一个代码块没有工作时呢?

如果有其他方法可以使用内置的df.to_excel功能将许多数据帧放入Excel中,请分享!

4 个答案:

答案 0 :(得分:22)

user3817518:“如果有其他方法可以使用内置的df.to_excel功能将许多数据帧放入Excel中,请分享!”

这是我的尝试:

简单地将大量数据框组合在一个工作表或多个选项卡上。如果有效,请告诉我!

- 要测试,只需运行示例数据帧以及代码的第二和第三部分。

示例数据帧

$.each(company_array, function(index, value) { 
  if ($(this).val().toLowerCase().equals(value[0].toLowerCase())) {
      $("#ViewExistingCustomer").attr("href", "customers?seq=" + value[1]);
      alert("This company name already exists on another customer.");
  }
});

将多个数据框放入一个xlsx工作表

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))

将多个数据框放在不同的标签/表格

# 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)

答案 1 :(得分:18)

要提前创建工作表,您需要将创建的工作表添加到to_excel词典:

write_cells

使用原始代码:

excel_writer.write_cells(formatted_cells, sheet_name, startrow=startrow, startcol=startcol)

说明

如果我们查看pandas函数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

所以查看sheet_name的{​​{1}}函数:

self.sheets

我们可以看到它检查{{1}}中的{{1}},因此也需要将其添加到其中。

答案 2 :(得分:1)

艾德里安的答案可以简化如下

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)

通过python 0.25.3用于熊猫3.7.6

答案 3 :(得分:0)

我更倾向于首先连接数据帧,然后将该数据帧转换为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)