用python操作excel的一些个人小结

1、读取文件(非常实用的format函数),并且创建工作表,工作表下面是sheet,我们的操作都是在sheet上进行的。

workbook = xlrd.open_workbook('./{0}.xls'.format(2014))
booksheet = workbook.sheet_by_index(0)

2、读取行数和列数

booksheet.nrows
booksheet.ncols

3、解一元三次方程

p=[1,-6,9,-9];roots(p)

ans =

4.4260e+000
7.8701e-001 +1.1891e+000i
7.8701e-001 -1.1891e+000i

4、MATLAB数字和字符串的转换

a=num2str(123)

a=str2num('234')

5、MATLAB神经网络改变测试集和验证集

net.divideParam.trainRatio = 70/100; net.divideParam.valRatio = 15/100; net.divideParam.testRatio = 15/100;

6、将字典写入CSV文件

array1=[array1](array是一个字典)
pd.DataFrame(array1).to_csv('shop_pay_count_demo.csv')

 

小操作

7、光标移动到本行最后 End 本行首端 Home

 

正则表达式总结:

8、data_c=re.sub('\s','',data) 去掉所有空格

下面是一个实例,xlrd和xlwt一个只能读,一个只能新建,要改的话只能用xlutils

import xlrd
import xlwt
import xlutils
import re
from xlutils.copy import copy        #导入copy模块
# rb = xlrd.open_workbook('2003-2017房地产开发公司财务数据2019318.xlsx')
# wb = copy(rb)                          #利用xlutils.copy下的copy函数复制
# booksheet_wt = wb.get_sheet(0)                   #获取表单0
# # ws.write(0, 0, '123')             #改变(0,0)的值
# # ws.write(8,0,'456')           #增加(8,0)的值     #**改变第九行第一列的值
#                 #保存文件
# booksheet_rd=rb.sheet_by_index(0)
# print(booksheet_rd.cell(0,83))
# data=booksheet_rd.cell(0,110).value
# data_c=re.sub('\s','',data)
# print(data_c)
#
# booksheet_wt.write(0,0,data)
# wb.save('processed.xls')
####分割线

# r=0.1206
r=0.0556

rb = xlrd.open_workbook('2003-2017房地产开发公司财务数据2019318.xlsx')
booksheet_rd=rb.sheet_by_index(0)
wb = copy(rb)
booksheet_wt = wb.get_sheet(0)
index={}                                    #index 中的序号可以直接用
ncols=booksheet_rd.ncols#列数,从1开始算起的
nrows=booksheet_rd.nrows
# print(ncols)
# print(booksheet_rd.cell(0,112).value)
for i in range(ncols) :
	col_name=booksheet_rd.cell(0,i).value
	index[re.sub('\s','',col_name)]=i
print(index)
for i in range(ncols):
	col_name = booksheet_rd.cell(0, i).value
	booksheet_wt.write(0,i,re.sub('\s','',col_name))
wb.save('processed.xls')
# print(booksheet_rd.cell(3, 100))# is number type



#calculate BV
rb = xlrd.open_workbook('processed.xls')
booksheet_rd=rb.sheet_by_index(0)
wb = copy(rb)
booksheet_wt = wb.get_sheet(0)
ncols=booksheet_rd.ncols#列数,从1开始算起的,不能直接用
nrows=booksheet_rd.nrows
for i1 in range(2003,2018):
	col_name_zichan='资产总计[报告期]{0}年报[报表类型]合并报表[单位]万元'.format(str(i1))
	col_name_fuzhai='负债合计[报告期]{0}年报[报表类型]合并报表[单位]万元'.format(str(i1))
	col_name_ZGB = '总股本[交易日期]{0}-12-31[单位]万股'.format(str(i1))
	# print(col_name)
    #每个公司
	for i2 in range(1,nrows):
		# print(i2)
		index_number_zichan = index[col_name_zichan]
		index_number_fuzhai = index[col_name_fuzhai]
		index_number_ZGB = index[col_name_ZGB]
		# print(type(booksheet_rd.cell(i2, index_number_zichan).value))
		# print(booksheet_rd.cell(i2,index_number_zichan).value)
		# print(type(booksheet_rd.cell(i2, index_number_zichan).value))
		BV_ZGB=(booksheet_rd.cell(i2,index_number_zichan).value-booksheet_rd.cell(i2,index_number_fuzhai).value)\
		/booksheet_rd.cell(i2,index_number_ZGB).value
		BV = booksheet_rd.cell(i2, index_number_zichan).value - booksheet_rd.cell(i2, index_number_fuzhai).value
		
		name1='BV{0}/ZGB'.format(str(i1))
		name2='BV{0}'.format(str(i1))
		
		booksheet_wt.write(0, ncols + i1 - 2003, name1)
		booksheet_wt.write(i2, ncols + i1 - 2003, BV_ZGB)
		
		booksheet_wt.write(0, ncols + i1 - 2003+15, name2)
		booksheet_wt.write(i2, ncols + i1 - 2003+15, BV)
wb.save('processed.xls')



#刷新Index
rb = xlrd.open_workbook('processed.xls')
booksheet_rd=rb.sheet_by_index(0)
wb = copy(rb)
booksheet_wt = wb.get_sheet(0)
index={}                                    #index 中的序号可以直接用
ncols=booksheet_rd.ncols#列数,从1开始算起的
nrows=booksheet_rd.nrows
# print(ncols)
# print(booksheet_rd.cell(0,112).value)
for i in range(ncols) :
	col_name=booksheet_rd.cell(0,i).value
	index[re.sub('\s','',col_name)]=i
wb.save('processed.xls')
# print(booksheet_rd.cell(3, 100))# is number type



#算 RI
rb = xlrd.open_workbook('processed.xls')
booksheet_rd=rb.sheet_by_index(0)
wb = copy(rb)
booksheet_wt = wb.get_sheet(0)
ncols=booksheet_rd.ncols#列数,从1开始算起的,不能直接用
nrows=booksheet_rd.nrows
for i1 in range(2004,2018):
	col_name_MOS='销售净利率[报告期]{0}年报[单位]%'.format(str(i1))#注意这是百分数
	col_name_ATO='总资产周转率[报告期]{0}年报[单位]次'.format(str(i1))
	col_name_EM='权益乘数[报告期]{0}年报'.format(str(i1))
	col_name_BV='BV{0}'.format(str(i1-1))
	col_name_ZGB = '总股本[交易日期]{0}-12-31[单位]万股'.format(str(i1))
	# print(col_name)
    #每个公司
	for i2 in range(1,nrows):
		# print(i2)
		index_number_MOS = index[col_name_MOS]
		index_number_ATO = index[col_name_ATO]
		index_number_EM  = index[col_name_EM]
		index_number_BV  = index[col_name_BV]
		index_number_ZGB = index[col_name_ZGB]
		# print(type(booksheet_rd.cell(i2, index_number_zichan).value))
		# print(booksheet_rd.cell(i2,index_number_zichan).value)
		# print(type(booksheet_rd.cell(i2, index_number_zichan).value))
		
		RI_ZGB=(booksheet_rd.cell(i2,index_number_MOS).value /100 * booksheet_rd.cell(i2,index_number_ATO).value* \
			booksheet_rd.cell(i2, index_number_EM).value-r)\
			* booksheet_rd.cell(i2,index_number_BV).value/booksheet_rd.cell(i2,index_number_ZGB).value
		RI = (booksheet_rd.cell(i2, index_number_MOS).value / 100 * booksheet_rd.cell(i2, index_number_ATO).value * \
			booksheet_rd.cell(i2, index_number_EM).value - r) \
			 * booksheet_rd.cell(i2, index_number_BV).value
		
		name1 = 'RI{0}/ZGB'.format(str(i1))
		name2='RI{0}'.format(str(i1))
		
		booksheet_wt.write(0, ncols+i1-2004, name1)
		booksheet_wt.write(i2,ncols+i1-2004,RI_ZGB)
		
		booksheet_wt.write(0, ncols + i1 + 14 - 2004, name2)
		booksheet_wt.write(i2, ncols + i1 + 14 - 2004, RI)
wb.save('processed.xls')



#刷新Index
rb = xlrd.open_workbook('processed.xls')
booksheet_rd=rb.sheet_by_index(0)
wb = copy(rb)
booksheet_wt = wb.get_sheet(0)
index={}                                    #index 中的序号可以直接用
ncols=booksheet_rd.ncols#列数,从1开始算起的
nrows=booksheet_rd.nrows
# print(ncols)
# print(booksheet_rd.cell(0,112).value)
for i in range(ncols) :
	col_name=booksheet_rd.cell(0,i).value
	index[re.sub('\s','',col_name)]=i
wb.save('processed.xls')
# print(booksheet_rd.cell(3, 100))# is number type



#算 P
rb = xlrd.open_workbook('processed.xls')
booksheet_rd=rb.sheet_by_index(0)
wb = copy(rb)
booksheet_wt = wb.get_sheet(0)
ncols=booksheet_rd.ncols#列数,从1开始算起的,不能直接用
nrows=booksheet_rd.nrows
for i1 in range(2004,2018):
	col_name_ZSZ='总市值1[交易日期]{0}-12-31[单位]万元'.format(str(i1))#注意这是百分数
	col_name_ZGB='总股本[交易日期]{0}-12-31[单位]万股'.format(str(i1))
	for i2 in range(1,nrows):
		# print(i2)
		index_number_ZSZ = index[col_name_ZSZ]
		index_number_ZGB = index[col_name_ZGB]
		# print(type(booksheet_rd.cell(i2, index_number_zichan).value))
		# print(booksheet_rd.cell(i2,index_number_zichan).value)
		# print(type(booksheet_rd.cell(i2, index_number_zichan).value))
		P=booksheet_rd.cell(i2,index_number_ZSZ).value / booksheet_rd.cell(i2,index_number_ZGB).value
		name='P{0}'.format(str(i1))
		booksheet_wt.write(0, ncols+i1-2004, name)
		booksheet_wt.write(i2,ncols+i1-2004,P)
wb.save('processed.xls')



#刷新Index
rb = xlrd.open_workbook('processed.xls')
booksheet_rd=rb.sheet_by_index(0)
wb = copy(rb)
booksheet_wt = wb.get_sheet(0)
index={}                                    #index 中的序号可以直接用
ncols=booksheet_rd.ncols#列数,从1开始算起的
nrows=booksheet_rd.nrows
# print(ncols)
# print(booksheet_rd.cell(0,112).value)
for i in range(ncols) :
	col_name=booksheet_rd.cell(0,i).value
	index[re.sub('\s','',col_name)]=i
wb.save('processed.xls')
# print(booksheet_rd.cell(3, 100))# is number type















 

你可能感兴趣的:(用python操作excel的一些个人小结)