[英]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部分或此處和此處的示例。
如果它不適用於你的情況,那么我猜:
workbook_Id
不是唯一的,您正在覆蓋相同的工作表。 workbook_Id == data_id
只有一次真實。 我將從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.