如何用Python自动在Excel新增列存储DataFrame,无需指定起始列号
问题描述
我需要每日运行以下Python代码,将DataFrame存储到Excel的新列中。当前代码使用日期的日数(例如dx=9对应第9列)作为起始列号,若间隔运行会导致列出现空白。请问如何无需指定startcol,自动将数据存入下一个新列?
df1 = pd.DataFrame({today:mob}) df2 = pd.DataFrame({today:dtop}) writer=pd.ExcelWriter('Pagespeed.xlsx',mode='a',engine="openpyxl", if_sheet_exists='overlay') df1.to_excel(writer, index=False,sheet_name='Mobile',startcol=dx) df2.to_excel(writer,index=False,sheet_name='Desktop',startcol=dx) writer.save()
解决方案
核心逻辑是先读取现有工作表的已用列数,以此作为新数据的起始列位置,彻底摆脱手动指定列号的限制。
修改后的完整代码
import pandas as pd from openpyxl import load_workbook # 假设today、mob、dtop已提前定义 df1 = pd.DataFrame({today: mob}) df2 = pd.DataFrame({today: dtop}) file_path = 'Pagespeed.xlsx' # 初始化列数,文件不存在时从0开始 mobile_col_start = 0 desktop_col_start = 0 try: # 加载现有工作簿,获取已使用的最大列号 wb = load_workbook(file_path) mobile_col_start = wb['Mobile'].max_column desktop_col_start = wb['Desktop'].max_column except FileNotFoundError: # 首次运行文件不存在时,保持列数为0 pass # 写入数据到下一个空白列 with pd.ExcelWriter(file_path, mode='a', engine="openpyxl", if_sheet_exists='overlay') as writer: df1.to_excel(writer, index=False, sheet_name='Mobile', startcol=mobile_col_start) df2.to_excel(writer, index=False, sheet_name='Desktop', startcol=desktop_col_start)
关键说明
- 借助
openpyxl的load_workbook读取现有文件,通过max_column属性直接获取工作表已用的最大列号,这个值就是新数据的起始列。 - 增加了文件不存在的异常处理,确保首次运行也能正常写入。
- 用
with语句管理ExcelWriter,无需手动调用save(),代码更简洁安全。
内容的提问来源于stack exchange,提问作者Abhishek Raina
相关产品推荐
相关产品推荐

