более быстрый способ добавить новые данные в существующий файл Excel? - PullRequest
1 голос
/ 10 апреля 2020

Я создал фрейм данных panda для выходных значений и сохранил его в книге Excel на нескольких листах. Для одного прогона время и скорость хороши для вычислений и записи файла Excel. Однако, когда я пытаюсь запустить этот код внутри для l oop (не менее 1000 раз), время для записи новых данных в файл Excel увеличивается. Итак, есть ли более быстрый способ записи новых данных?

for _ in range(0,1000):
            # code
            df1 = pd.DataFrame({'': [_],'Pp': [pp], 'Qq': [qq], 'Pl': [pl], 'Ql': [ql]})
            df2 = pd.DataFrame({'MP': [i for i in mp]})
            df3 = pd.DataFrame({'MQ': [j for j in mq]})
            df4 = pd.DataFrame({'LP': [i for i in lp]})
            df5 = pd.DataFrame({'LQ': [j for j in lq]})
            writer = pd.ExcelWriter('data.xlsx', engine='openpyxl')
            writer.book = load_workbook('data.xlsx')
            writer.sheets = dict((ws.title, ws) for ws in writer.book.worksheets)
            reader = pd.read_excel(r'data.xlsx')
            df1.to_excel(writer, index=False, header=False, startrow=len(reader) + 1, sheet_name='Sheet1')
            df2.to_excel(writer, index=False, header=False, startcol=len(reader) + 1, sheet_name='Sheet2')
            df3.to_excel(writer, index=False, header=False, startcol=len(reader) + 1, sheet_name='Sheet3')
            df4.to_excel(writer, index=False, header=False, startcol=len(reader) + 1, sheet_name='Sheet4')
            df5.to_excel(writer, index=False, header=False, startcol=len(reader) + 1, sheet_name='Sheet5')
            writer.close()

1 Ответ

0 голосов
/ 10 апреля 2020

Не добавляйте каждый DF данных отдельно, собирайте все по листам и добавляйте их за один шаг (возможно, еще один l oop, который перебирает листы, а не новые строки).

Правдоподобно если у вас есть только простые типы данных, вы можете упростить свою логику c, экспортировав ее в CSV в качестве промежуточного шага, прежде чем пытаться ввести ее, даже если она не настолько эффективна.

...