如何使用Pandas DataFrame为已有数据的Excel添加额外索引或列
实现方法
当然可以实现,下面提供两种方案来达到你想要的效果:
方案1:修改DataFrame结构(通过多层索引/转置索引)
如果希望通过DataFrame本身的结构来实现带额外表头和索引列的效果,可以使用**多层列索引(MultiIndex)**和将行索引转为列的方式:
import pandas as pd # 创建原始DataFrame df = pd.DataFrame([['a', 'b'], ['c', 'd']], index=['row 1', 'row 2'], columns=['col 1', 'col 2']) # 将行索引转为普通列,并命名为"Index" df = df.reset_index().rename(columns={'index': 'Index'}) # 给列设置多层索引,上层为"Header" df.columns = pd.MultiIndex.from_tuples([('Header', col) if col != 'Index' else ('', col) for col in df.columns]) # 写入Excel writer = pd.ExcelWriter('pandas_custom.xlsx', engine='xlsxwriter') df.to_excel(writer, sheet_name='Sheet1', index=False) writer.close()
该方案通过DataFrame的多层索引实现上层表头,同时保留单独的索引列,让Excel表格结构与期望完全一致。
方案2:使用XlsxWriter手动设置格式(适合保留原始DataFrame结构的场景)
如果不想改动原始DataFrame的结构,可以利用XlsxWriter的单元格合并和格式设置功能,手动添加额外的表头和索引列标题:
import pandas as pd # 原始DataFrame代码 df = pd.DataFrame([['a', 'b'], ['c', 'd']], index=['row 1', 'row 2'], columns=['col 1', 'col 2']) writer = pd.ExcelWriter('pandas_format.xlsx', engine='xlsxwriter') df.to_excel(writer, sheet_name='Sheet1', startrow=1, startcol=1) # 预留行和列用于添加额外内容 # 获取工作簿和工作表对象 workbook = writer.book worksheet = writer.sheets['Sheet1'] # 添加左上角的索引标题"Index" worksheet.write('A2', 'Index') # 合并单元格添加上层表头"Header" worksheet.merge_range('B1:C1', 'Header', workbook.add_format({'align': 'center'})) # 可选:设置格式让表格更美观 header_format = workbook.add_format({'bold': True, 'align': 'center', 'border': 1}) cell_format = workbook.add_format({'border': 1}) # 应用格式到表头 for col_num, value in enumerate(df.columns.values, 1): worksheet.write(1, col_num + 0, value, header_format) # 应用格式到数据行 for row_num, row_data in enumerate(df.values, 2): worksheet.write(row_num, 0, df.index[row_num-2], cell_format) for col_num, value in enumerate(row_data, 1): worksheet.write(row_num, col_num, value, cell_format) writer.close()
该方案通过调整写入位置,手动添加额外标题并合并单元格,完全匹配你期望的视觉效果,同时保留原始DataFrame的结构。
内容的提问来源于stack exchange,提问作者hacker_man_2021
相关产品推荐
相关产品推荐

