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:

enter image description here

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

Popular posts from this blog

Are Regular VACUUM ANALYZE Still Recommended Under 9.1?

Can Feynman Diagrams Be Used To Represent Any Perturbation Theory?