Как быстрее открыть файл excel из панд? - PullRequest
0 голосов
/ 26 марта 2019

Файл Excel, создаваемый из python, очень медленно открывается, даже если размер файла составляет около 50 МБ.

Я пробовал и на пандах, и на openpyxl.

def to_file(list_report,list_sheet,strip_columns,Name):
    i = 0
    wb = ExcelWriter(path_output + '\\' + Name + dateformat + '.xlsx')
    while i <= len(list_report)-1:
        try:
            df = pd.DataFrame(pd.read_csv(path_input + '\\' + list_report[i] + reportdate + '.csv'))
            for column in strip_column:
                try:
                    df[column] = df[column].str.strip('=("")')
                except:
                    pass
            df = adjust_report(df,list_report[i])
            df = df.apply(pd.to_numeric, errors ='ignore', downcast = 'integer')
            df.to_excel(wb, sheet_name = list_sheet[i], index = False)
        except:
            print('Missing report: ' + list_report[i])
        i += 1
    wb.save()

Есть ли способ ускорить его?

1 Ответ

0 голосов
/ 26 марта 2019

идиома

Давайте переименуем list_report в reports. Тогда ваш цикл while обычно выражается просто: for i in range(len(reports)):

Вы получаете доступ к i -ому элементу несколько раз. Цикл может связать это для вас с помощью: for i, report in enumerate(reports):.

Но оказывается, что вам даже не нужно i. Таким образом, большинство людей написали бы это как: for report in reports:

код организации

Этот бит кода очень хорош:

        for column in strip_column:
            try:
                df[column] = df[column].str.strip('=("")')
            except:
                pass

Я рекомендую вам похоронить его в виде вспомогательной функции, используя def strip_punctuation. (Список должен быть во множественном числе, я думаю? strip_columns?) Тогда у вас будет простая последовательность df заданий.

время * +1027 * Прошедший профиль time(). Окружите каждое df назначение кодом, подобным следующему: t0 = time() df = ... print(time() - t0) Это покажет вам, какая часть вашего конвейера обработки занимает больше всего времени и, следовательно, должна получить наибольшее усилие для его ускорения. Я подозреваю, adjust_report() использует большую часть времени, но не видя этого, трудно сказать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...