把許多python熊貓數據框放到一個excel工作表中


Answers

要預先創建工作表,您需要將創建的工作表添加到工作表中:

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) 

說明

如果我們看一下熊貓函數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 ,所以它也需要在那裡添加。

Question

只要是不同的工作表,將許多熊貓數據框添加到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) 

這將工作。 所以,我在上發布這個問題的目的是雙重的。 首先,我希望這將幫助某人,如果他/她在Excel中試圖將許多數據框放入一個工作表。

其次,有人能幫我理解這兩個代碼塊之間的區別嗎? 在我看來,他們幾乎是相同的,除了第一塊代碼創建的工作表提前“驗證”,而第二塊沒有。 我得到那部分。

我不明白的是為什麼它有什麼不同呢? 即使我不提前創建工作表,這行,最後一行之前,

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

將無論如何創建一個工作表。 因此,當我們到達最後一行代碼時,工作表“驗證”已經在第二個代碼塊中創建了。 所以,我的問題基本上,為什麼第二個代碼塊的工作,而第一個不?

如果還有其他方法可以使用內置的df.to_excel功能將許多數據框放入excel,也請分享!




Links