如何将两个同结构Pandas DataFrame分别导出为Excel单元格内容与批注?
给Excel单元格批量添加对应DataFrame内容作为批注的实现方案
可以通过pandas结合openpyxl库快速实现需求,具体步骤如下:
1. 导出基础数据到Excel
先将df_chart导出到目标Excel文件,注意指定openpyxl作为引擎,方便后续修改:
import pandas as pd from openpyxl import load_workbook from openpyxl.comments import Comment # 导出df_chart到Excel output_file = "result.xlsx" df_chart.to_excel(output_file, sheet_name="Chart", engine="openpyxl", index=True, header=True)
2. 加载文件并批量添加批注
加载生成的Excel文件,遍历df_comments的每个单元格,将对应内容添加为df_chart单元格的批注:
# 加载工作簿和指定工作表 wb = load_workbook(output_file) ws = wb["Chart"] # 遍历df_comments的每一行和每一列 for row_num, (index_label, row_data) in enumerate(df_comments.iterrows(), start=2): for col_num, comment_content in enumerate(row_data, start=1): # 跳过空值,避免添加无意义的空批注 if pd.notna(comment_content): # 获取对应单元格并添加批注 target_cell = ws.cell(row=row_num, column=col_num) target_cell.comment = Comment(str(comment_content), "批注作者") # 保存修改后的文件 wb.save(output_file)
关键说明
- 单元格索引对应:
openpyxl的单元格行/列从1开始计数,enumerate(start=2)是因为表头占了第1行,数据从第2行开始;列从第1列开始对应DataFrame的第一列。 - 自定义索引适配:如果你的DataFrame使用了非默认的自定义索引,上述代码的
row_num计算依然有效,因为enumerate(start=2)会自动对应到Excel的行位置(表头行之后的第一行数据)。 - 空值处理:通过
pd.notna()过滤空的批注内容,避免给单元格添加空批注。
内容的提问来源于stack exchange,提问作者Nebuliser
相关产品推荐
相关产品推荐

