2013-01-09 58 views
4

隨着this code,有可能每個數據幀導出一個新的工作表迭代的數據幀列表:出口很多小DataFrames到一個Excel工作表

def save_xls(list_dfs, xls_path): 
    writer = ExcelWriter(xls_path) 
    for n, df in enumerate(list_dfs): 
     df.to_excel(writer,'sheet_dati%s' % n) 
    writer.save() 
save_xls(list_dfs, xls_path) 

但它可以導出兩個或多個數據幀一張工作表?

回答

5

如果你想在同一張紙上有多個DataFrames如何將結合起來?相反merge, join, or concatenate預先將它們組合成一個單一的DataFrame,因爲熊貓給你提供了多種方式。然後做出口。

3

我想你會更好地做這些數據框concat之前出口(通過to_excel)。那就是:

pd.concat(list_dfs).to_excel(xls_path) 
+0

謝謝,但是在工作表上導出時,數據框的集成是混亂的(它們合併在一起,而不是按順序)。不幸的是,我認爲我應該學習大量的合併,連接和連接功能,以便在表格上具有可用和正確格式的數據。無論如何,這個命令也很有用。謝謝。 M –

+0

@ManuelZompetta合併在熊貓本身並不是太棘手,最好的運氣:) –

+0

+1 for Manuel,之前pandas.ExcelWriter有一個寫行方法,可用於此目的。但我注意到最近的版本刪除了這種方法。我認爲有時候人們會有一些有理由被分開的數據框。 – wiswit

11

就像這樣:?

from pandas import ExcelWriter 
def dfs2xlsx(list_dfs,xls_path = None): 
    #save_xls([df1,df2],'output1.xlsx') 
    if xls_path == None : 
     xls_path = '~tmp.xlsx' 
    writer = ExcelWriter(xls_path) 
    i=0 
    for n, df in enumerate(list_dfs): 
     df.to_excel(writer,'Sheet1',startcol=i,startrow =2) 
     i+= len(df.columns) + 2 
    writer.save() 
    os.system('start excel.exe %s' %(writer.path)) 
+0

很好的回答。非常感謝。 –

3

+1爲ashkan的回答。此方法允許您多次寫入標題,並且比在單個數據框之間留出空間更容易,比將空白行插入一個更大的連續數據框更容易。例如:

writer = pd.ExcelWriter(os.path.join(filepath, filename)) 
for item in list_of_dataframes: 
    item.to_excel(writer, "sheetname", startcol=0, startrow=n) 
    n += len(item.index) + 2 
writer.save() 

這允許你寫多個(可能是不同的或無關)dataframes到一個Excel工作表,一個接一個,離開每個之間的空行,你去了網頁。

+5

這篇文章似乎很貼切地解釋了另一個答案,而不是它自己的獨立帖子。如果您有其他信息可以添加到答案中,那很好。但只是評論一個職位是什麼意見。 – gunr2171

+1

作爲新成員,我無法發表評論,我首先嚐試了。下次注意:) – AndrewH

相關問題