+1 for ashkan's answer. This method allows you to write the headers multiple times, and do things like leaving space between the individual dataframes much more easily than inserting blank rows into one larger concat'd dataframe. For instance:
writer = pd.ExcelWriter(os.path.join(filepath, filename))
for item in list_of_dataframes:
item.to_excel(writer, "sheetname", startcol=0, startrow=n)
n += len(item.index) + 2
writer.save()
This allows you to write multiple (possibly different or unrelated) dataframes into one excel sheet, one after another, leaving a blank line between each as you go down the page.