如何用Python向Pandas Excel DataFrame末尾添加行并保持索引连续?
解决方案
方法1:使用Pandas(推荐)
原文件由Pandas导出,用Pandas读取并追加数据能完美匹配原格式,操作简单。
代码示例
import pandas as pd # 读取原Excel文件,指定索引列为第1列(原导出时包含索引) df = pd.read_excel("rankings.xlsx", index_col=0) # 定义需要补充的列表 List1 = ["Sample", "Sample2", "Sample3"] List2 = [1, 12, 20] List3 = [1, 11, 12] # 计算新数据的起始索引:原数据行数即为起始值(原9900条数据,索引从0到9899,新索引从9900开始) start_idx = len(df) # 创建新DataFrame并指定索引范围 new_df = pd.DataFrame( data={"Name": List1, "WTN": List2, "Dubs WTN": List3}, index=range(start_idx, start_idx + len(List1)) ) # 合并原数据与新数据 updated_df = pd.concat([df, new_df]) # 导出回原Excel文件(建议先备份原文件,避免意外) updated_df.to_excel("rankings.xlsx")
说明
- 用
len(df)获取原数据行数,确保新索引从9900开始,不受原索引是否连续的影响。 pd.concat会保留原列顺序和格式,避免手动操作单元格导致的格式混乱。
方法2:使用OpenPyXL(处理格式)
如果必须用OpenPyXL,需要手动提取原单元格样式并应用到新行,解决格式异常问题。
代码示例
from openpyxl import load_workbook # 加载原工作簿 wb = load_workbook("rankings.xlsx") ws = wb.active # 获取原数据最后一行的行号 last_row = ws.max_row # 定义需要补充的列表 List1 = ["Sample", "Sample2", "Sample3"] List2 = [1, 12, 20] List3 = [1, 11, 12] # 提取原数据行的样式(以第2行数据为例) sample_row = ws[2] cell_styles = [] for cell in sample_row: cell_styles.append({ "font": cell.font.copy(), "fill": cell.fill.copy(), "border": cell.border.copy(), "alignment": cell.alignment.copy() }) # 逐行追加数据并应用样式 for idx in range(len(List1)): current_row = last_row + 1 + idx # 填充索引列(第1列) cell = ws.cell(row=current_row, column=1, value=9900 + idx) cell.font = cell_styles[0]["font"] cell.fill = cell_styles[0]["fill"] cell.border = cell_styles[0]["border"] cell.alignment = cell_styles[0]["alignment"] # 填充Name列(第2列) cell = ws.cell(row=current_row, column=2, value=List1[idx]) cell.font = cell_styles[1]["font"] cell.fill = cell_styles[1]["fill"] cell.border = cell_styles[1]["border"] cell.alignment = cell_styles[1]["alignment"] # 填充WTN列(第3列) cell = ws.cell(row=current_row, column=3, value=List2[idx]) cell.font = cell_styles[2]["font"] cell.fill = cell_styles[2]["fill"] cell.border = cell_styles[2]["border"] cell.alignment = cell_styles[2]["alignment"] # 填充Dubs WTN列(第4列) cell = ws.cell(row=current_row, column=4, value=List3[idx]) cell.font = cell_styles[3]["font"] cell.fill = cell_styles[3]["fill"] cell.border = cell_styles[3]["border"] cell.alignment = cell_styles[3]["alignment"] # 保存工作簿 wb.save("rankings.xlsx")
说明
- 提取原数据行的样式并复制到新单元格,保证格式与原文件一致。
- 此方法步骤繁琐,仅在无法使用Pandas时采用。
内容的提问来源于stack exchange,提问作者Programmer0403
相关产品推荐
相关产品推荐

