Append Existing Excel Sheet With New Dataframe Using Python Pandas
Answer :
A helper function for appending DataFrame to existing Excel file:
def append_df_to_excel(filename, df, sheet_name='Sheet1', startrow=None, truncate_sheet=False, **to_excel_kwargs): """ Append a DataFrame [df] to existing Excel file [filename] into [sheet_name] Sheet. If [filename] doesn't exist, then this function will create it. Parameters: filename : File path or existing ExcelWriter (Example: '/path/to/file.xlsx') df : dataframe to save to workbook sheet_name : Name of sheet which will contain DataFrame. (default: 'Sheet1') startrow : upper left cell row to dump data frame. Per default (startrow=None) calculate the last row in the existing DF and write to the next row... truncate_sheet : truncate (remove and recreate) [sheet_name] before writing DataFrame to Excel file to_excel_kwargs : arguments which will be passed to `DataFrame.to_excel()` [can be dictionary] Returns: None """ from openpyxl import load_workbook import pandas as pd # ignore [engine] parameter if it was passed if 'engine' in to_excel_kwargs: to_excel_kwargs.pop('engine') writer = pd.ExcelWriter(filename, engine='openpyxl') # Python 2.x: define [FileNotFoundError] exception if it doesn't exist try: FileNotFoundError except NameError: FileNotFoundError = IOError try: # try to open an existing workbook writer.book = load_workbook(filename) # get the last row in the existing Excel sheet # if it was not specified explicitly if startrow is None and sheet_name in writer.book.sheetnames: startrow = writer.book[sheet_name].max_row # truncate sheet if truncate_sheet and sheet_name in writer.book.sheetnames: # index of [sheet_name] sheet idx = writer.book.sheetnames.index(sheet_name) # remove [sheet_name] writer.book.remove(writer.book.worksheets[idx]) # create an empty sheet [sheet_name] using old index writer.book.create_sheet(sheet_name, idx) # copy existing sheets writer.sheets = {ws.title:ws for ws in writer.book.worksheets} except FileNotFoundError: # file does not exist yet, we will create it pass if startrow is None: startrow = 0 # write out the new sheet df.to_excel(writer, sheet_name, startrow=startrow, **to_excel_kwargs) # save the workbook writer.save()
Usage examples...
Old answer: it allows you to write a several DataFrames to a new Excel file.
You can use openpyxl
engine in conjunction with startrow
parameter:
In [48]: writer = pd.ExcelWriter('c:/temp/test.xlsx', engine='openpyxl') In [49]: df.to_excel(writer, index=False) In [50]: df.to_excel(writer, startrow=len(df)+2, index=False) In [51]: writer.save()
c:/temp/test.xlsx:
PS you may also want to specify header=None
if you don't want to duplicate column names...
UPDATE: you may also want to check this solution
If you aren't strictly looking for an excel file, then get the output as csv file and just copy the csv to a new excel file
df.to_csv('filepath', mode='a', index = False, header=None)
mode = 'a'
a means append
This is a roundabout way but works neat!
Comments
Post a Comment