在 pandas 列标题上方插入一行以将标题名称保存在 Excel 工作表的第一个单元格中

ana*_*chy 4 python excel pandas

我有多个看起来像这样的数据框,数据无关紧要。

在此输入图像描述

我希望它看起来像这样,我想在列标题上方插入一个标题。

在此输入图像描述

我想将它们合并到一个 Excel 文件中的多个选项卡中。

是否可以在将文件保存到 Excel 之前在列标题上方添加另一行并在第一个单元格中插入标题。

我目前正在这样做。

with pd.ExcelWriter('merged_file.xlsx',engine='xlsxwriter') as writer:
    for filename in os.listdir(directory):
        if filename.endswith('xlsx'):
            print(filename)
            if 'brands' in filename:
                some function
            elif 'share' in filename:
                somefunction
            else:
                some function
            df.to_excel(writer,sheet_name=f'{filename[:-5]}',index=True,index_label=True)
writer.close()
Run Code Online (Sandbox Code Playgroud)

但是sheet_name太长了,这就是为什么我想在列标题上方添加标题。

我试过这段代码,

columns = df.columns
columns = list(zip([f'{filename[:-5]}'] * len(df.columns), columns))             
columns = pd.MultiIndex.from_tuples(columns) 
df2 = pd.DataFrame(df,index=df.index,columns=columns) 
df2.to_excel(writer,sheet_name=f'{filename[0:3]}',index=True,index_label=True)
Run Code Online (Sandbox Code Playgroud)

但最终看起来像这样,所有数据都消失了,

在此输入图像描述

它应该看起来像这样

在此输入图像描述

jez*_*ael 8

您可以先从第二行写入数据,然后将文本写入第一个单元格:

df = pd.DataFrame({'col': list('abc'), 'col1': list('def')})
print (df)
  col col1
0   a    d
1   b    e
2   c    f

writer = pd.ExcelWriter('test.xlsx', engine='xlsxwriter')
df.to_excel(writer, sheet_name='Sheet1', startrow = 1, index=False)
workbook  = writer.book
worksheet = writer.sheets['Sheet1']

text = 'sometitle'
worksheet.write(0, 0, text)
writer.save()
Run Code Online (Sandbox Code Playgroud)

然后对于阅读需要:

title = pd.read_excel('test.xlsx', nrows=0).columns[0]
print (title)
sometitle

df = pd.read_excel('test.xlsx', skiprows=1)
print (df)
  col col1
0   a    d
1   b    e
2   c    f
Run Code Online (Sandbox Code Playgroud)