Write.xlsx运行非常缓慢,我可以加快速度吗?

时间:2019-02-04 13:40:44

标签: r package rstudio

我一直在使用Write.xlsx将结果导出到Excel工作簿的每个选项卡中,并且它的运行速度与我期望的一样,但运行速度非常慢。我花了9个半小时运行了大约120行write.xlsx。这是我正在使用的代码,以“水果”为例:

forecast_custom <- function(selected_fruit) {
  df_sub <- subset(FruitData, Fruit == selected_fruit)
  ts_sub <- ts(df_sub$avg)
  forecast(auto.arima(ts_sub), h = 12)
} 

然后:

ForecastApple <-  forecast_custom("Apple")
ForecastBanana <-  forecast_custom("Banana")

最后:

write.xlsx2(ForecastApple, file="ForecastModel.xlsx", sheetName="Apple", 
row.names=FALSE)
write.xlsx2(ForecastBanana, file="ForecastModel.xlsx", sheetName="Banana", 
append=TRUE, row.names=FALSE)

可以说这些预测和write.xlsx(我从write.xlsx切换到write.xlsx2,但仍然很慢)持续100行。为何运行速度如此之慢?

谢谢!

3 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,以及使用write.xlsx()时遇到的一些烦人的错误。 write_xlsx()软件包中的writexl效果很好,而且速度更快!它可以与小贴士一起正常工作。

有关更多信息,请参见https://ropensci.org/technotes/2017/09/08/writexl-release/

答案 1 :(得分:0)

您可以尝试使用write_csv()软件包中的readr(尽管同样的建议,您将创建多个csv文件而不是单个工作簿)。速度非常快,大约是write.csv的两倍。

答案 2 :(得分:0)

尝试这个:

filename='ForecastModel.xlsx`
if os.path.exists(filename):          # appending to it if "ForecastModel.xlsx" exists
    with pd.ExcelWriter(filename, mode='a') as writer:
        ForecastApple.to_excel(writer, engine='xlsxwriter', sheet_name='Apple', encoding='utf8', index=False)
        ForecastBanana.to_excel(writer, engine='xlsxwriter', sheet_name='Banana', encoding='utf8', index=False)
else:                                 # creating "ForecastModel.xlsx" if not.
    with pd.ExcelWriter(filename, mode='a') as writer:
        ForecastApple.to_excel(writer, engine='xlsxwriter', sheet_name='Apple', encoding='utf8', index=False)
        ForecastBanana.to_excel(writer, engine='xlsxwriter', sheet_name='Banana', encoding='utf8', index=False)

根据Why is it so much slower to export my data to .xlsx than to .xls or .csv?的答案中的jmcnamara:

  

Pandas默认使用OpenPyXL来编写xlsx文件,这可能比用于编写xls文件的xlwt模块要慢。

     

以XlsxWriter作为xlsx输出引擎来尝试。