我一直在使用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行。为何运行速度如此之慢?
谢谢!
答案 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输出引擎来尝试。