R语言格式化DataFrame并导出Excel:列名缺失问题解决
解决DataFrame导出Excel时显示完整列名+分组子标题的问题
问题出在你原来的代码大概率只指定了Parameter列作为表头,或者没提前写入完整的列名。直接给你改好的代码方案,拿过来就能用:
示例代码(带完整注释)
import pandas as pd from openpyxl.utils import get_column_letter # 替换成你的真实DataFrame data = { 'Group': ['A', 'A', 'B', 'B'], 'Parameter': ['Param1', 'Param2', 'Param1', 'Param2'], 'Value1': [10, 20, 30, 40], 'Value2': [100, 200, 300, 400] } df = pd.DataFrame(data) # 导出到Excel with pd.ExcelWriter('output.xlsx', engine='openpyxl') as writer: # 1. 先写入完整的表头(排除Group列,因为要作为子标题单独显示) header_cols = df.columns.drop('Group').tolist() # 写入表头到Excel第1行(openpyxl用1-based索引) writer.sheets['Sheet1'].write_row(1, 0, header_cols) current_row = 2 # 表头占了第1行,下一行开始写分组子标题 # 2. 遍历每个分组,写入子标题和对应数据 for group_name, group_df in df.groupby('Group'): # 写入分组子标题,跨列合并更美观 sub_title = f'Group: {group_name}' writer.sheets['Sheet1'].write(current_row, 0, sub_title) # 合并子标题单元格:从第A列到最后一列 num_cols = len(header_cols) writer.sheets['Sheet1'].merge_cells(f'A{current_row+1}:{get_column_letter(num_cols)}{current_row+1}') current_row += 1 # 3. 写入当前分组的数据(关闭表头,因为已经提前写过了) group_data = group_df[header_cols] group_data.to_excel(writer, startrow=current_row, index=False, header=False) # 每组数据后空一行,增强可读性 current_row += len(group_data) + 1
关键修改点
- 提前写入完整的列名表头,不再只局限于
Parameter列 - 分组写入数据时设置
header=False,避免重复生成表头 - 用
openpyxl引擎支持单元格合并操作,让子标题跨列显示更规整
如果你的需求是保留Group列在表头里,只需要把header_cols = df.columns.drop('Group').tolist()改成header_cols = df.columns.tolist(),再调整子标题的写入位置即可。
内容的提问来源于stack exchange,提问作者Mimo
相关产品推荐
相关产品推荐

