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