2016-08-17 35 views
1

我有一個40MB的數據框「dfScore」我寫這封信的.xlsx。 enter image description here 代碼如下,寫入數據框中原來的.xlsx太慢

writer = pandas.ExcelWriter('test.xlsx', engine='xlsxwriter') 
dfScore.to_excel(writer,sheet_name='Sheet1') 
writer.save() 

代碼dfScore.to_excel需要將近一個小時,the code writer.save()需要一個小時。這是正常的嗎?有沒有一種好的方法可以少於10分鐘?

我已經在stackoverflow中搜索,但它似乎有一些建議不能解決我的問題。

+0

數據幀的大小是4百萬行乘5列。嘗試寫入csv並比較時間。 – Merlin

+0

現代excel電子表格只能處理1,048,576行。 –

+0

它不是太慢,它卡住了。它已經死了。你正在寫更多的行,而不是excel可以處理的。這導致了Excel作家默默無聞地等待着一個永遠不會發生的奇蹟。將數據框分成不同的位並將它們作爲單獨的工作表編寫,或者使用其他格式(例如csv),或使用一些統計工具壓縮數據框以使其適合於excel。 – Kartik

回答

0

代碼dfScore.to_excel需要將近一個小時,代碼writer.save()需要一個小時。這是正常的嗎?

這聽起來有點太高。我運行了XlsxWriter測試,寫了1,000,000行x 5列,花費了大約100秒。時間會根據測試機的CPU和內存而有所不同,但1小時慢36倍,看起來不正確。

請注意,Excel和XlsxWriter僅支持每個工作表1,048,576行,因此您正在有效地丟棄3/4的數據並浪費時間進行操作。

有沒有一種好的方法可以少於10分鐘?

對於純粹的XlsxWriter程序pypy給出了很好的加速。例如,用pypy重新運行我的1,000,000行×5列測試用例,時間從99.15s增加到16.49s。我不知道Pandas是否可以和pypy一起工作。

0

爲什麼不把它保存爲.csv? 我已經在我的個人筆記本電腦上使用了較重的DataFrame,並且在寫入xlsx時遇到了同樣的問題。

your_dataframe.to_csv('my_file.csv',encoding='utf-8',columns=list_of_dataframe_columns) 

然後你可以簡單地將它轉換成.xlsx MS Excel或在線轉換器。