python操作excel,你的报表不再复制粘贴
这么久不见我,感谢你们都没有离开我,那是我前段时间呢,就是我好忙,你们知道吗?我知道你们不知道,但是,请原谅我是有理由没更新的,所以,千万不要骂小编我,真实没时间啊~~
今天这个代码的背景是,因为,你要频繁的做模型,但是模型有报告,你要做日常汇报,但是汇报要有报告对吧,报告就要有事数据,对不对,那数据它呢,偏偏还要再数据库或者你的python的dataframe里面,那这样子就很烦啊,是不是!!!你就一直不停地复制粘贴,每次都是复制粘贴啊,这时候我伟大的python就在你的背后说了一句,你这么还在愚蠢的操作excel,然后python就给你丢了这几个包,xlwt,xlrd,xlutils,让你的python跟你的excel无缝衔接了~~
先简单的介绍这个包的主要功能:
Python中一般使用xlrd库来读取Excel文件,使用xlwt库来生成Excel文件,使用xlutils库复制和修改Excel文件。在应用层面来说,就是xlrd包是用来读进来你的excel,相当于只读功能,不能修改,xlwt包不但有读改的权限,很神奇xlwt,没有另存为的功能,然后就有了xlutils包了,所以你操作excel还是要这三个库来一起用的。
那么接下来就这三个包的函数简单介绍一下
:1xlrd
import xlrd
pi_excel= xlrd.open_workbook("我是你爸爸.xls")
#打开你的excel
pi_excel.nsheets
#统计这个excel有多少个sheet
pi_excel.sheets()
#列出这个excel的所有sheet的列表
pi_excel.sheet_names()
#列出这个excel的sheet名字
pi_sheet=pi_excel.sheets()[0]
#获取第一个sheet
pi_sheet=pi_excel.sheet_by_name(u"这个是目录")
#通过名字获取目录
pi_sheet.nrows
#看下你读的sheet的行数
pi_sheet.ncols
#看下你读的sheet的列数
#这里注意一下哈,你合并单元格还是算那么多行哈,不是你合并就是算一行了
pi_sheet.row(i)
pi_sheet.row_values(i)
#读第几行的内容出来,从0开始数哈,这两个差不多功能
pi_sheet.col(i)
pi_sheet.col_values(i)
#读第几列的内容出来
2xlwt
from xlwt import *
pi_book = Workbook()
#我创建了一个excel,里面什么都没有
pi_sheet = pi_book.add_sheet('Sheet1')
#然后我创建了sheet1
pi_sheet.write(0, 0, label = '我是你爸爸')
#再然后我就在A1的那个空格写入了”我是你爸爸“五个字
pi_sheet.write(1, 0, xlwt.Formula('A1*B1')) # 输出 "10" (A1[5] * A2[2])
#再然后我就在A2那个空格填了一个公式A1*B1
pi_book.save('./我是你的大屁.xls')
#最后我把这个数据保存成了名字为“我是你的大屁”的xls文件
3xlutils
from xlrd import open_workbook
from xlutils.copy import copy
pi_book = open_workbook('我是你爸爸.xls',formatting_info=True)
#我打开了我存在本地的“我是你爸爸.xls”,而且告诉他,你不准把我的“我是你爸爸.xls"里面的格式给我改了,不准哈
workbook = xlutils.copy.copy(rb)
#然后啊,我需要改下里面的东西,但是我不能再原先的东西里面改,所以要拷贝一份在python里面改
pi_sheet=workbook.get_sheet(u'我是你爸爸')
#我读了里面一个叫“我是你爸爸”的sheet
workbook.close()
#然后我觉得突然之前没啥写,所以我就他关了
wb.save('我是你爸爸_2.xls')
#之后我把它另存为另外有一个xls,叫“我是你爸爸_2”
以下是一个实际例子
import pandas as pd
import datetime
import xlrd
import xlutils.copy
import os
import xlrd
import xlwt
from xlutils.copy import copy
from xlwt import *
import pandas as pd
import datetime
filepath = 'C:/CSV_DATA/data_test.xls'
rb = xlrd.open_workbook(filepath,formatting_info=True)
#读入一个datatest的文件,formatting_info=True这个参数是保证格式不变,但是如果你的文件是xlsx会报错,所以事先修改为xls
wb = xlutils.copy.copy(rb)
#创建一个可写入的副本
sheet1=wb.get_sheet(u'目录')
#读入“目录”这个sheet
gg=summary.dtypes.reset_index(drop=False)
for k in range(len(gg['index'])):
print(k)
col=1+k
m=gg['index'][k]
row = 6
for l in summary[m]:
print(l)
print(row)
sheet1.write(row, col, l)
row += 1
#把summary这个dataframe写进去
wb.close()
wb.save('C:/CSV_DATA/data_test_outee.xls')
#写完之后另存为data_test_outee.xls
以下的实例分析是输出模型逻辑回归的参数到excel
import xlsxwriter
# 首先对python的statmodels输出逻辑回归的参数结果转化成Dataframe格式
results_as_html = LR.summary().tables[1].as_html()
LRresult=pd.read_html(results_as_html,header=0, index_col=0)[0]
# 创建Excel表格模型文档python写入.xls,并添加一个sheet名叫逻辑回归统计量
# workbook指向模型文档python写入.xls,worksheet指向sheet逻辑回归统计量
workbook = xlsxwriter.Workbook('d:\模型文档python写入.xls')
worksheet = workbook.add_worksheet('逻辑回归统计量')
# 下面根据自己的文档规范逐行逐列读入数据
row=0
col=0
worksheet.write(row, col, '标签')
worksheet.write(row, col + 1, 'coef')
worksheet.write(row, col + 2, 'std err')
row+=1
worksheet.write(row, col, LRresult.index[-1])
worksheet.write(row, col + 1, LRresult['coef'][-1:])
worksheet.write(row, col + 2, LRresult['std err'][-1:])
row+=1
for i in range(len(LRresult)-1):
worksheet.write(row, col, LRresult.index[i])
print(LRresult.index[i])
worksheet.write(row, col + 1, LRresult['coef'][i])
worksheet.write(row, col + 2, LRresult['std err'][i])
row += 1
# 关闭并保存表格内容
workbook.close()