一:利用python读取Excel中.xls文件中所有数据
#encoding=utf-8
import xlrd
import xlwt
from xlwt import *
fileName="test01.xls"
bk=xlrd.open_workbook(fileName)
shxrange=range(bk.nsheets)
try:
sh=bk.sheet_by_name("Sheet1")
except:
print ("代码出错")
nrows=sh.nrows #获取行数
book = Workbook(encoding='utf-8')
for i in range(1,nrows):
j = 1
row_data=sh.row_values(i)
#col_data=sh.col_values(i)
print(row_data)
借助两个库,利用Workbook,把Excel中的数据一行一行输出来。
二:对Excel中数据按照列进行操作,例如某列满足什么条件就如何如何。
if (row_data[24]<=5):
row_data[24]= 1
elif (row_data[24] >5) :
row_data[24] = 2
# 25 5:800450 rna eot
if (row_data[25] <= 5 ):
row_data[25] = 1
elif (row_data[25] >5):
row_data[25] = 2
# 26 5:800450 rna ef
if (row_data[26]<=5):
row_data[26]= 1
elif (row_data[26] >5) :
row_data[26] = 2
三. 操作完数据,把操作后的结果保存到Excel文件中
#encoding=utf-8
import xlrd
import xlwt
from xlwt import *
fileName="test01.xls"
bk=xlrd.open_workbook(fileName)
shxrange=range(bk.nsheets)
try:
sh=bk.sheet_by_name("Sheet1")
except:
print ("代码出错")
nrows=sh.nrows #获取行数
book = Workbook(encoding='utf-8')
sheet = book.add_sheet('Sheet1') #创建一个sheet
f = xlwt.Workbook()
sheet1 = f.add_sheet(u'sheet1', cell_overwrite_ok=True) # 创建sheet
for i in range(1,nrows):
j = 1
row_data=sh.row_values(i)
# col_data=sh.col_values(i)
print(row_data)
for k in range(len(row_data)):
sheet1.write(i, k, row_data[k])
f.save("res16.xls")
核心代码: 新建Excel文件,用sheet.write() 进行一行一列的数据写入
sheet = book.add_sheet('Sheet1') #创建一个sheet
f = xlwt.Workbook()
sheet1 = f.add_sheet(u'sheet1', cell_overwrite_ok=True) # 创建sheet
for i in range(1,nrows):
j = 1
row_data=sh.row_values(i)
# col_data=sh.col_values(i)
print(row_data)
for k in range(len(row_data)):
sheet1.write(i, k, row_data[k])
f.save("res16.xls")
四.实际应用
我们要处理埃及患者的丙型肝炎病毒(HCV)的数据集埃及患者的丙型肝炎病毒(HCV)的数据集。即对原始数据进行分类和范围内赋值。
#encoding=utf-8
import xlrd
import xlwt
from xlwt import *
#------------------读数据---------------------------------
fileName="test01.xls"
bk=xlrd.open_workbook(fileName)
shxrange=range(bk.nsheets)
try:
sh=bk.sheet_by_name("Sheet1")
except:
print ("代码出错")
nrows=sh.nrows #获取行数
book = Workbook(encoding='utf-8')
sheet = book.add_sheet('Sheet1') #创建一个sheet
f = xlwt.Workbook()
sheet1 = f.add_sheet(u'sheet1', cell_overwrite_ok=True) # 创建sheet
for i in range(1,nrows):
j = 1
row_data=sh.row_values(i)
# col_data=sh.col_values(i)
#获取第i行第3列数据
#
if (row_data[0]>=32)and (row_data[0]<37):
row_data[0]= 1
elif (row_data[0] >=37) and (row_data[0] < 42):
row_data[0] = 2
elif (row_data[0]>=42)and (row_data[0]<47):
row_data[0]= 3
elif (row_data[0] >=47) and (row_data[0] < 52):
row_data[0] = 4
elif (row_data[0]>=52)and (row_data[0]<57):
row_data[0]= 5
elif (row_data[0] >=57) and (row_data[0] < 62):
row_data[0] = 6
# > 18.5, >= 18.5& < 25, >= 25& < 30, >= 30& < 35, >= 35& < 40
if (row_data[2]>=18)and (row_data[2]<25):
row_data[2]= 1
elif (row_data[2] >=25) and (row_data[2] < 30):
row_data[2] = 2
elif (row_data[2]>=30)and (row_data[2]<35):
row_data[2]= 3
elif (row_data[2] >=35) and (row_data[2] < 40):
row_data[2] = 4
# < 4000, >= 4000& < 11000, >= 11000
# 与论文相比少了一列bone ache
if (row_data[10]>=0)and (row_data[10]<4000):
row_data[10]= 1
elif (row_data[10] >=4000) and (row_data[10] < 11000):
row_data[10] = 2
elif (row_data[10]>=11000):
row_data[10]= 3
# 11
# < 3000000, >= 3000000& < 5000000, >= 5000000
# 这一列的属性要剔除了看来,或者重新归类划分范围。
if (row_data[11]>=3000000)and (row_data[11]<5000000):
row_data[11]= 1
elif (row_data[11] >=5000000) :
row_data[11] = 2
# 12 2:20
# If (Gender==[Male]):[2; 14[, [14; 17:5], ]17:5; 20]If(Gender==[Female]):[2; 12:3[, [12:3; 15:3], ]15:3; 20]
if(row_data[1]-1 == 0):
if (row_data[12] >= 2) and (row_data[12] < 14):
row_data[12] = 1
elif (row_data[12] >= 14) and (row_data[12] < 17.5):
row_data[12] = 2
elif (row_data[12] >= 17.5):
row_data[12] = 3
elif(row_data[1]-2==0):
if (row_data[12] >= 2) and (row_data[12] < 12.3):
row_data[12] = 4
elif (row_data[12] >= 12.3) and (row_data[12] < 15.3):
row_data[12] = 5
elif (row_data[12] >= 15.3):
row_data[12] = 6
# 13 100000 255000
#[93013; 100000[, [100000; 255000[,[255000; 226465[
if (row_data[13]>=0)and (row_data[13]<100000):
row_data[13]= 1
elif (row_data[13] >=100000) and (row_data[13] < 255000):
row_data[13] = 2
elif (row_data[13]>=255000):
row_data[13]= 3
# 14 39:128 20,40 week1
if (row_data[14]>=0)and (row_data[14]<40):
row_data[14]= 1
#elif (row_data[14] >=40) and (row_data[14] < 80):
# row_data[14] = 2
elif (row_data[14]>=40):
row_data[14]= 2
# 15 week1
if (row_data[15]>=0)and (row_data[15]<40):
row_data[15]= 1
#elif (row_data[15] >=40) and (row_data[15] < 80):
# row_data[15] = 80
elif (row_data[15]>=40):
row_data[15]= 2
# 16 week4
if (row_data[16]>=0)and (row_data[16]<40):
row_data[16]= 1
#elif (row_data[16] >=40) and (row_data[16] < 80):
# row_data[16] = 80
elif (row_data[16]>=40):
row_data[16]= 2
#17 week12
if (row_data[17]>=0)and (row_data[17]<40):
row_data[17]= 1
#elif (row_data[17] >=40) and (row_data[17] < 80):
# row_data[17] = 80
elif (row_data[17]>=40):
row_data[17]= 2
#18 week24 39:128
if (row_data[18]>=0)and (row_data[18]<40):
row_data[18]= 1
#elif (row_data[18] >=40) and (row_data[18] < 80):
# row_data[18] = 80
elif (row_data[18]>=40):
row_data[18]= 2
#19 5:128 week36
if (row_data[19]>=0)and (row_data[19]<20):
row_data[19]= 1
elif (row_data[19] >=20) and (row_data[19] < 40):
row_data[19] = 2
elif (row_data[19]>=40):
row_data[19]= 3
#20 week48 5:128
if ((row_data[20]>=0)and (row_data[20]<20)):
row_data[20]= 1
elif ((row_data[20] >=20) and (row_data[20] < 40)):
row_data[20] = 2
elif ((row_data[20]>=40) and (row_data[20] <130)):
row_data[20]= 3
# 21 ALT after 24w
if (row_data[21]>=0)and (row_data[21]<20):
row_data[21]= 1
elif (row_data[21] >=20) and (row_data[21] < 40):
row_data[21] = 2
elif (row_data[21]>=40):
row_data[21]= 3
# 22 11:1201086 RNA Base
if (row_data[22]>=0)and (row_data[22]<=5):
row_data[22]= 1
elif (row_data[22] >5) :
row_data[22] = 2
# 23 5:120715 ena4
if (row_data[23]<=5):
row_data[23]=1
elif (row_data[23] >5):
row_data[23] = 2
# 24 5:3137527 rna12
if (row_data[24]<=5):
row_data[24]= 1
elif (row_data[24] >5) :
row_data[24] = 2
# 25 5:800450 rna eot
if (row_data[25] <= 5 ):
row_data[25] = 1
elif (row_data[25] >5):
row_data[25] = 2
# 26 5:800450 rna ef
if (row_data[26]<=5):
row_data[26]= 1
elif (row_data[26] >5) :
row_data[26] = 2
#
# 27 3:16 grading 不需要它改动
#27
# 28 1:4 label
# 这一列不用任何改动
#print(row_data[28])
print(row_data)
for k in range(len(row_data)):
sheet1.write(i, k, row_data[k])
f.save("res15.xls")