2

Reproduced code :

import numpy as np 
import pandas as pd

# Create a Dataframe
df1 = pd.DataFrame(np.random.rand(8).reshape(4,2),columns=['X','Y']);print(df1.shape)
df2 = pd.DataFrame(np.random.rand(6).reshape(3,2),columns=['X','Y']);print(df2.shape)
df3 = pd.DataFrame(np.random.rand(10).reshape(5,2),columns=['X','Y']);print(df3.shape)

These above three data frame which has same columns but different rows , need to written in same excel sheet one below other . Expected Output as shown below. DataFrame in single sheet one below other

Note: No of dataframe may vary

Nabi Shaikh
  • 787
  • 1
  • 6
  • 26

1 Answers1

6

Here is one way to do this:

dfs = [df1, df2, df3]
startrow = 0
with pd.ExcelWriter('output.xlsx') as writer:
    for df in dfs:
        df.to_excel(writer, engine="xlsxwriter", startrow=startrow)
        startrow += (df.shape[0] + 2)

Alternatively, if you want a single header at the top of the sheet:

dfs = [df1, df2, df3]
with pd.ExcelWriter('output.xlsx') as writer:
    dfs[0].to_excel(writer, engine="xlsxwriter", startrow=0)
    startrow = dfs[0].shape[0] + 2
    for df in dfs[1:]:
        df.to_excel(writer, engine="xlsxwriter", startrow=startrow, header=False)
        startrow += (df.shape[0] + 2)
Laurent
  • 12,287
  • 7
  • 21
  • 37
  • Is it possible to add a single header at the top of the generated sheet? I'm getting a header between every DataFrame. I have tried to set the option 'header=False', but it remove every header. – Aragorn64 Oct 18 '22 at 17:37
  • 1
    @Aragon64 Hi, yes, see my extended my answer. Cheers. – Laurent Oct 18 '22 at 18:26