Write.xlsx работает очень медленно, я могу ускорить его? - PullRequest
0 голосов
/ 04 февраля 2019

Я использовал Write.xlsx для экспорта своих результатов в каждую вкладку книги Excel, и она работает так, как мне хотелось бы, за исключением того, что она работает исключительно медленно.Мне потребовалось 9 с половиной часов, чтобы запустить около 120 строк write.xlsx.Вот код, который я использую, с примером "Fruit":

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 строк.Любая причина, почему это будет работать так медленно?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 28 апреля 2019

Попробуйте это:

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='w+') 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)

Согласно jmcnamara в ответе Почему экспорт моих данных в .xlsx намного медленнее, чем в .xls или .csv? :

Панды по умолчанию используют OpenPyXL для записи файлов xlsx, который может работать медленнее, чем модуль xlwt, используемый для записи файлов xls.

Попробуйте вместо этого использовать XlsxWriter в качестве механизма вывода xlsx.

0 голосов
/ 04 февраля 2019

Вы можете попробовать write_csv() из пакета readr (хотя, как то же самое, вы будете создавать несколько файлов CSV вместо одной рабочей книги).Это очень быстро, примерно в два раза быстрее, чем write.csv.

...