如何将Pandas DataFrame从指定单元格开始追加到现有Excel文件?
问题
现有如下结构的Pandas DataFrame:
0 1 2 0 0.1 0.2 0.3 1 0.2 0.3 0.4 2 0.3 0.4 0.5 3 0.4 0.5 0.6
需要将其追加到现有Excel文件test1.xlsx的Sheet1中,从D2单元格开始写入所有列,但当前代码仅能写入第一列:
wb = load_workbook('test1.xlsx') ws = wb['Sheet1'] for index, row in newdf.iterrows(): cell = 'D%d' % (index + 2) ws[cell] = row[0] wb.save('test1.xlsx')
当前生成的Excel内容:
A B C D 1 2 0.1 3 0.2 4 0.3 5 0.4
预期实现效果:
A B C D E F 1 2 0.1 0.2 0.3 3 0.2 0.3 0.4 4 0.3 0.4 0.5 5 0.4 0.5 0.6
解决方案
原代码只写入了每行的第一个元素(row[0])且固定了D列,要写入所有列,需要遍历每行的每个元素并对应到正确的列(D、E、F...)。以下是两种可行的修改方式:
方法1:通过列索引转换赋值
from openpyxl import load_workbook wb = load_workbook('test1.xlsx') ws = wb['Sheet1'] # 起始列是D,对应openpyxl的列编号为4(列从1开始计数) start_col_num = 4 for df_row_idx, row in newdf.iterrows(): # Excel行号从2开始,对应DataFrame的第0行 excel_row = df_row_idx + 2 for df_col_idx, value in enumerate(row): # 计算目标列编号 target_col_num = start_col_num + df_col_idx # 转换为Excel列字母(如4→D) target_col_letter = ws.cell(row=1, column=target_col_num).column_letter # 拼接单元格地址并赋值 ws[f"{target_col_letter}{excel_row}"] = value wb.save('test1.xlsx')
方法2:直接按行列数字赋值(更高效)
无需转换列字母,直接通过行列编号赋值,代码更简洁:
from openpyxl import load_workbook wb = load_workbook('test1.xlsx') ws = wb['Sheet1'] start_col_num = 4 # D列的编号(openpyxl列从1开始) for df_row_idx, row in newdf.iterrows(): excel_row = df_row_idx + 2 for df_col_idx, value in enumerate(row): target_col_num = start_col_num + df_col_idx # 直接指定行列赋值 ws.cell(row=excel_row, column=target_col_num, value=value) wb.save('test1.xlsx')
关键说明
- 原代码的问题在于仅处理了每行的第一个元素,且固定写入D列,因此只生成了第一列数据。
- 两种方法都会遍历DataFrame的所有元素,根据起始位置(D2,即行2、列4)计算每个元素的目标单元格,从而完整写入所有列。
- 方法2省略了列字母转换步骤,执行效率更高,推荐使用。
内容的提问来源于stack exchange,提问作者beginner
相关产品推荐
相关产品推荐

