簡體   English   中英

迭代多個Dataframe並在excel xlsxwriter python中寫入excel電子表格

[英]Iterate multiple Dataframe and write into excel spreadsheets within an excel xlsxwriter python

我正在excel文件中的excel電子表格中編寫多個數據幀。 數據幀使用for循環生成,因此在每次迭代中我都會獲得下一個可用的數據幀,但我無法在電子表格中編寫每個數據幀。 我只能在第一個電子表格中編寫第一個數據幀。 以下是代碼段:

 writer = pd.ExcelWriter('output.xlsx', engine='xlsxwriter')
    workbook = writer.book
    web_ClassID=df_stag["Web-Class ID"].unique()
          for data_id, df in df_stag.groupby('Web-Class ID'): 
             for workbook_Id in web_ClassID:
                 if workbook_Id == data_id:
                    for index, col in enumerate(df):
                    df.to_excel(writer,sheet_name=workbook_Id,index=False )
                    writer.save()
    workbook.close()

注意:這里的webclass_id是對象的類型Df_stag:是一個按Webclass_id分組的數據框df是我要寫入excel電子表格的數據框另外,每當找到新的Webclass_id時,我都會創建電子表格,因此創建的選項卡是找到時對應的Webclass_id。 一個文件有幾個標簽, 另一個文件有幾個標簽

輸出:我想要一個excel文件,其中包含來自所有文件的所有選項卡以及來自這些文件的附加數據,這些文件在兩個文件中都有相同的選項卡。 即。 11111,22222,33333和來自11111的數據應來自這兩個文件。

只需在for循環外移動writer.save()

writer = pd.ExcelWriter('output.xlsx', engine='xlsxwriter')
workbook = writer.book
web_ClassID=df_stag["Web-Class ID"].unique()

for data_id, df in df_stag.groupby('Web-Class ID'):
    for workbook_Id in web_ClassID:
        if workbook_Id == data_id:
            for index, col in enumerate(df):
                df.to_excel(writer,sheet_name=workbook_Id,index=False )
writer.save()
workbook.close()

對於更短的代碼,只需迭代過濾而不需要工作簿對象:

writer = pd.ExcelWriter('output.xlsx')
for d in df_stag["Web-Class ID"].unique():    
    df_stag[df_stag["Web-Class ID"]==d].to_excel(writer, sheet_name=d, index=False)        

writer.save()

絕對可以使用XlsxWriter將多個數據幀寫入單獨的工作表或同一工作表中的不同位置。

請參閱XlsxWriter文檔的處理多個Pandas Dataframes部分或此處此處的示例。

如果它不適用於你的情況,那么我猜:

  1. workbook_Id不是唯一的,您正在覆蓋相同的工作表。
  2. workbook_Id == data_id只有一次真實。
  3. 你有一些舊版本的Pandas或XlsxWriter。

我將從1.和2.開始,然后輸入一些調試語句。

我終於找到了回答我的問題!!

我只需將對象分配給sheet_name屬性,它就會自動將每個dataframe實例復制到工作表名為workbook_Id的excel表中。 即。 df.to_excel(作家,SHEET_NAME = workbook_Id)

@Parfait:早些時候我的代碼創建了新的Excel工作表,但它沒有復制excel工作表中的dataframe實例。 我只將工作表名稱作為Web級別的ID。

即使我列舉了df並嘗試在excel表中寫入df。 它只是編寫第一個數據幀的內容

for index, col in enumerate(df):
                df.to_excel(writer,sheet_name=workbook_Id,index=False )
writer.save()

將workbook_id分配給sheet_name不會創建新工作表並在sheet_name中分配內容。

df.to_excel(writer,sheet_name=workbook_Id)

另外,我發現不需要撰寫writer.save。 即使我們在迭代to_excel()之后編寫了workbook.close(),它也會編寫並保存數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM