数据处理-对Excel文件读取和操作和存储(python版)

一:利用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")

 

 

 

你可能感兴趣的:(Python,数据预处理)