Из документации pandas.ExcelWriter
:
You can also append to an existing Excel file:
>>> with ExcelWriter('path_to_file.xlsx', mode='a') as writer:
... df.to_excel(writer, sheet_name='Sheet3')
Ключевое слово mode
имеет значение при создании экземпляра класса ExcelWriter
.
mode='w'
выделяет место для файла (который он создает, когда вы вызываете .save()
или .close()
), когда его нет, или перезаписывает, если файл уже существует.
mode='a'
предполагает, что файл существует, и добавляет к этому файлу. Если вы хотите сохранить структуру своего кода, вы должны добавить небольшую строку, например, так:
import pandas as pd
import os
def multiple_dfs(df_list, sheets, file_name, spaces):
arg_mode = 'a' if file_name in os.getcwd() else 'w' # line added
writer = pd.ExcelWriter(file_name, engine='xlsxwriter', mode=arg_mode) # added mode argument
row = 0
for dataframe in df_list:
dataframe.to_excel(writer,sheet_name=sheets,startrow=row , startcol=0)
row = row + len(dataframe.index) + spaces + 1
writer.save()
если вы затем запустите следующую серию кода (ов):
multiple_dfs(dfs_gfk, 'GFK', 'file_of_tables.xlsx', 1)
multiple_dfs(dfs_top, 'TOP', 'file_of_tables.xlsx', 1)
multiple_dfs(dfs_all, 'Total', 'file_of_tables.xlsx', 1)
последний (и второй вызов функции) не будет перезаписывать данные, записанные в данный момент. Вместо этого происходит то, что первый вызов функции создает файл, а затем второй и третий вызов функции добавляют к этим данным. Теперь ваша функция должна работать.