当前位置: 首页 > 知识库问答 >
问题:

在列标题上方插入一行,以在csv/excel文件的第一个单元格中保存标题名称

房项禹
2023-03-14

我有多个数据帧,看起来像这样,数据是不相关的。

我想将它们合并到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()

但是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)

但最终看起来像这样,所有的数据都不见了,

应该是这样的

共有2个答案

段干昊然
2023-03-14

可以使用MultiIndex。有一个例子:

import pandas as pd 
df = pd.read_excel('data.xls')
header = pd.MultiIndex.from_product([['Title'],
                                     list(df.columns)])
pd.DataFrame(df.to_numpy(), None , columns = header)

此外,我还可以在Deepnote(我最喜欢的工具)中与您分享我的解决方案和真实数据。您可以随意复制和玩自己的游戏。xls:https://deepnote.com/publish/3cfd4171-58e8-48fd-af21-930347e8e713

齐永昌
2023-03-14

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

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()

那么对于阅读需要:

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
 类似资料:
  • 我正在尝试在联接。但是对我来说,缺少一个功能。我为员工创建了,这些网格分为特定的部门,但有员工,这些员工仅在部门中。 不允许在一上添加。 所以结果应该是这样的: 即使< code>Vaadin不直接允许,有什么解决方案可以让我这样做吗? 因为如果我尝试过,它会引发异常

  • 我来自Sublime,在那里如果你打开一个新文件,它将使用这个文件的第一行作为标签的名称。我如何在不保存文件的情况下用VS代码完成同样的工作?目前,如果我试图做一些类似快速区分的事情,或者如果我做一些笔记,记住什么是什么是很烦人的。

  • 我正在尝试将Excel(.xls,.xlsx)文件转换为CSV,使用 对于xlsx到CSV

  • 不久前,一个大的Excel文件被导入到PostgreSQL表中。Excel中的布局如下所示(请将列表编号视为行号): 一些专栏|另一些专栏|还有另一个专栏| Descriptiontext foo | Descriptiontext 2 | bar foo bar | 值a |值b |值c | 值aa |值bb |值cc | 所以有一个标题行和列名,然后是一行,每个列有一个描述文本,然后是数百行和

  • 报告的标题由10个元素组成,如下所示: 实际上是这样的: 这和垂直照明有关吗?我已经把它搞定了。 我的jrxml文件中的片段:

  • 我正在开发一个应该删除命名列的小PowerShell脚本。有没有办法不选择标题为“xyz”的列? 我试图通过 并将结果连接到逗号分隔的字符串中并删除不需要的标头 然后使用