当前位置: 首页 > 面试题库 >

将许多python pandas数据帧放入一个Excel工作表

司寇昱
2023-03-14
问题内容

只要工作表不同,就可以很容易地将许多熊猫数据框添加到excel工作簿中。但是,如果要使用内置的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中将多个数据框放入一个工作表中会有所帮助。

其次,有人可以帮助我理解这两个代码块之间的区别吗?在我看来,它们几乎相同,除了第一段代码预先创建了名为“
Validation”的工作表,而第二段代码却没有。我明白了。

我不明白的是为什么它应该有所不同?即使我没有提前创建工作表,这一行,最后一行之前的那一行,

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

无论如何都会创建一个工作表。因此,到我们到达代码的最后一行时,在第二个代码块中也已经创建了工作表“
Validation”。因此,我的问题基本上是,为什么第二个代码块不能工作而第一个代码块却不能工作?

如果还有另外一种使用内置df.to_excel功能将许多数据帧放入excel的方法,也请分享!


问题答案:

要预先创建工作表,您需要将创建的工作表添加到sheets字典:

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,它将使用writerwrite_cells函数:

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

所以看一下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_namein self.sheets,因此也需要在其中添加它。



 类似资料:
  • 我知道如何复制工作表,但这将导致多个工作表。我需要的是一个输出工作表,一个接一个地包含所有的工作表。 目前我正在做的是将每个工作表导出为< code>DataTable,然后逐个导入: 但这样,我就失去了单元格样式和文本格式 有没有办法用保留样式?

  • 然后另一个问题是工作簿的名称都不同,所有300个。是否有一个宏可以复制我打开的工作簿,而不是每次都输入实际的名称?

  • 我想从一个目录中读取几个excel文件到pandas中,并将它们连接到一个大的数据帧中。不过我还没弄明白。我需要一些关于for循环和构建级联数据帧的帮助:

  • 我有一个Excel工作簿,其中包含36个不同的工作表,我每两周收到一次,工作表在所有标签上都有共同的标题,并且每个标签上都有不同的唯一标题,但每条记录都有一个唯一的ID,可以有多个记录。 我要做的是从所有的工作表中提取唯一的id,然后将每个工作表中的数据提取到一个工作表中,其中包含所有的公共标题和唯一标题。 我正在考虑使用下面帖子中的代码将其导入Access。连接表并将其导出回Excel中的一个工

  • 嗨,我需要一些帮助来编写VBA代码以自动将多个Excel(csv格式)文件导入Access。我需要导入的每个文件中的一个工作表上有2个数据范围。两个数据范围都有动态行数。Excel文件,让我们称它们为“SourceDataXXX. csv”,所有数据都在同一个工作表上,让我们称它为“InputData”。第一组数据总是从单元格A4开始,是7列数据(在单元格G4结束)。这组数据有可变数量的数据行。在

  • 所以我有 1500 个 Excel 工作簿,每个工作簿都有 10 张结构完全相同的工作表。我尝试将多个Excel工作簿合并到一个文件中,并使用以下代码成功: 谢谢,努尔贝克