Python向已有Excel工作表sheet写入数据框dataframe

使用Python向已有Excel工作表sheet写入数据框dataframe数据

项目场景:

通常使用SQL、Python处理完数据后会将需要导出的数据输出成CSV格式,然后必要时使用Excel模板进行格式上的调整(供业务人员查看),或者输入到Excel模板进一步计算,该步骤一般都是人工操作,对Python最后的输出操作优化可以提高一点工作效率。

具体示例

原有工作簿有两个工作表sheet1,sheet2,sheet1带有格式,需要从Python导出数据往里面写入,sheet2是对sheet1其中两列进行计算的工作表,已写入公式

Python向已有Excel工作表sheet写入数据框dataframe
sheet2设定带有公式计算
Python向已有Excel工作表sheet写入数据框dataframe
Python中有该数据框数据需要输出至sheet1
data=pd.DataFrame({'年份':[1995,1996,1997,1998,1999],'地区':['广州市','广州市','广州市','广州市','广州市'],
                   '性别':['男','男','男','男','男'],'婚姻':['未婚','未婚','未婚','未婚','未婚'],'AUM':[200000,200001,200002,200003,200004],
                  '人数':[40,41,42,43,44]})

工具

openpyxl模块:可以使往Excel文件追加数据时而不覆盖文件写入的模块;
pandas模块:to_excel()将dataframe直接整个输出到Excel的函数

import pandas as pd
from openpyxl import load_workbook,Workbook

测试时注意每一次都需要完整读入与关闭(load与save,close),否则改动后会发现结果无变化,原因是读入的是前一次测试的结果.

解决方法

  • 方法1
    由于某些业务场景可能需要逐个单元格读入到已有表格中的某些位置,使用 两层循环的方式逐格读入数据框的值
    需要注意的是表格位置与Python中数据框行列的起始位置的差异、range(m,n)实际输出的是从m至n-1的值。

filepath=r'table.xlsx'
writer = pd.ExcelWriter(filepath, engine='openpyxl')
writer.book=load_workbook(filepath)
ws=writer.book["Sheet1"]

for i in range(2,7):
    for j in range(1,7):
        ws.cell(row=i,column=j).value=data.iloc[i-2,j-1]
writer.save()
writer.close()

结果:
sheet1成功追加更新,表头未有变化

Python向已有Excel工作表sheet写入数据框dataframe
sheet2计算得出结果
Python向已有Excel工作表sheet写入数据框dataframe
  • 方法2:
    整个dataframe写入到sheet1中,覆盖sheet1中的数据。
    但原有表格格式样式发生部分变化(行标题字体从微软雅黑变成了宋体,但单元格颜色和加粗无变化)

filepath=r'table.xlsx'
writer = pd.ExcelWriter(filepath, engine='openpyxl')
writer.book=load_workbook(filepath)
writer.sheets={ws.title:ws for ws in writer.book.worksheets}
data.to_excel(writer,"Sheet1",index=False)
writer.save()
writer.close()

sheet1覆盖数据,更新成功,首行单元格格式无大变化,因此该操作不是重新另建一个sheet的结果

Python向已有Excel工作表sheet写入数据框dataframe
sheet2计算得出结果
Python向已有Excel工作表sheet写入数据框dataframe
writer.sheets={ws.title:ws for ws in writer.book.worksheets}

这句话是从别的博主中抄的,见下面参考链接,具体含义不明,如果删除掉这句话,继续执行后面的语句,原有的工作簿会多出一个sheet11,而不是在原有的sheet1中写入数据

见下面的参考链接

https://www.cnblogs.com/eternalpal/p/12920678.html
http://www.360doc.com/content/19/1228/21/644962_882790477.shtml
http://www.cocoachina.com/articles/93352
https://blog.csdn.net/miss_audrey/article/details/102741103

Original: https://blog.csdn.net/sinat_16200671/article/details/113977752
Author: 花非花雾非雾子非鱼
Title: Python向已有Excel工作表sheet写入数据框dataframe

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/754295/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球