使用Pandas修改Excel列内容不生效的代码问题排查
Excel列读写修改时DataFrame修改不生效问题修复
核心错误点
- 字符串替换操作未赋值回原列
pandas的
.str.replace()方法不会原地修改原Series,只会返回修改后的新对象。你代码中写的dfO["Store #"].str.replace("M","")仅生成了临时结果,没有重新赋值给dfO["Store #"]列,因此这步修改完全没有被保存到DataFrame中。
修正写法:dfO["Store #"] = dfO["Store #"].str.replace("M","") - 保存文件时未屏蔽默认行索引
你注释中提到的多余数字行号列,不需要通过
drop方法删除,只要在调用to_excel时传入index=False参数即可,否则保存后的文件会新增一列pandas自动生成的索引值,和你预期的表结构不一致。
修正写法:dfO.to_excel("Output" + date_time + ".xlsx", index=False)
修正后完整代码
from datetime import datetime from openpyxl import load_workbook import pandas as pd # 获取当日日期 now = datetime.now() date_time = now.strftime("%m%d%Y") # 打开目标工作簿和工作表 wb = load_workbook("Output" + date_time + ".xlsx") sheet = wb.active sheetname ="Sheet1" # 删除无用列压缩文件体积 sheet.delete_cols(19, 3) sheet.delete_cols(13, 5) sheet.delete_cols(7, 1) sheet.delete_cols(4, 1) sheet.delete_cols(1, 2) # 保存openpyxl阶段的列删除修改 wb.save("Output" + date_time + ".xlsx") # 读取处理后的文件为DataFrame dfO = pd.read_excel('Output' + date_time + '.xlsx') # 移除Store #列中的M字符,必须将结果赋值回原列 dfO["Store #"] = dfO["Store #"].str.replace("M","") # 转换时间列为datetime格式 dfO['EstimatedDateStartUTC'] = pd.to_datetime(dfO.EstimatedDateStartUTC) # 保存DataFrame,关闭索引写入避免多余列 dfO.to_excel("Output" + date_time + ".xlsx", index=False)
内容的提问来源于stack exchange,提问作者ensea
相关产品推荐
相关产品推荐

