码迷,mamicode.com
首页 > 其他好文 > 详细

借助openpyxl处理excel

时间:2019-10-08 19:23:10      阅读:117      评论:0      收藏:0      [点我收藏+]

标签:microsoft   mil   users   超出   文件中   pat   excel   class   mys   

一次处理excel中,原计划是借助excel中自带的工具进行处理,然而看到需要处理的列要达到30+,后来放弃了,用Python处理或许是一个不错的选择。

需求:

表格中每一列数据都是一个随机值,但是已知该列对应的标准区间,eg:20<x<40是正常区间,超出这一区间就是非正常区间,需要将落在正常区间的数据标记为0,落在非正常区间的数据标记为1。另外还有一种情况,eg:x<50是正常区间,超过50就是非法区间。

我的数据字典放在了sheet2中,首先去读取sheet2中的标准:

def readSheet2(ExcelFullName):
    wb = load_workbook(ExcelFullName)

    sheets = wb.sheetnames
    print (sheets)
    mysheet = sheets[1]

    #获取sheet2的信息
    ws = wb[mysheet]

    for i in range(2,29):
        mydata[ws.cell(row=i, column=1).value] = ws.cell(row=i, column=3).value

    print (mydata)

读出的标准放在了字典中:

{AST: 15-40, ALT: 9-50, GGT: 10-60, ALP: 45-125, ALB: 40-55, TB: 3.5-23.5, DB: 0.5-6.5, IB: 1.0-17, XT: 3.9-6.3, GYSZ: 0.4-1.8, DGC: 3.6-6.2, GMDZDB: 0.8-1.5, DMDZDB: 0.5-3.36, PT: 11.0-14.0, NXMYHDD: 70-50, WBC: 3.5-9.5, RBC: 4.3-5.8, HB: 130-175, PLT: 125-350, BDL: 0-20, HBsAg: <1.0, HBsAb: <10.0, HBeAg: <1.0, HBeAb: >1.0, HBcAb: >1.0, AFP: 0-20, PIVK: 0-40}

 

使用上面读出的标准对sheet1的数据进行处理。

# 按照sheet2的信息逐列处理sheet1
def readSheet1(ExcelFullName):
    wb = load_workbook(ExcelFullName)

    sheets = wb.sheetnames
    mysheet = sheets[0]

    # 获取sheet1的信息
    ws = wb[mysheet]

    for i in range(27, 56):
        if ws.cell(row=1, column=i).value in mydata:
            #print(i)
            print(ws.cell(row=1, column=i).value)
            str = mydata[ws.cell(row=1, column=i).value]
            if str[0]!=< and str[0]!=>:
                str = mydata[ws.cell(row=1, column=i).value]
                str1 = str.split(-)
                a = float(str1[0])
                b = float(str1[1])
                #c = a + b
                #print(c)
                for j in range(2,218):
                    if ws.cell(row=j, column=i).value != None:
                        if float(ws.cell(row=j, column=i).value) >=a and float(ws.cell(row=j, column=i).value) <=b:
                            ws.cell(row=j, column=i).value = 0
                        else:
                            ws.cell(row=j, column=i).value = 1

            else:
                op = str[0]
                opnum = float(str[1:])
                #print(opnum)
                if op == <:
                    for j in range(2, 218):
                        if ws.cell(row=j, column=i).value != None:
                            if float(ws.cell(row=j, column=i).value) < opnum:
                                ws.cell(row=j, column=i).value = 0
                            else:
                                ws.cell(row=j, column=i).value = 1
                else:
                    for j in range(2, 218):
                        if ws.cell(row=j, column=i).value != None:
                            if float(ws.cell(row=j, column=i).value) > opnum:
                                ws.cell(row=j, column=i).value = 0
                            else:
                                ws.cell(row=j, column=i).value = 1

    wb.save(balances.xlsx)

上述是两种处理方式,最后将数据保存在balances.xlsx文件中。

主函数如下:

if __name__ == __main__:

    # 需进行两次读excel与一次写excel
    excelPath = "C:/Users/Halo/Desktop/ml/"
    excelName = "info.xlsx"
    ExcelFullName= os.path.join(excelPath,excelName)

    # 存储sheet2中的信息,用于后续比较
    # mydata = {‘AST‘: ‘15-40‘, ‘ALT‘: ‘9-50‘, ‘GGT‘: ‘10-60‘, ‘ALP‘: ‘45-125‘, ‘ALB‘: ‘40-55‘, ‘TB‘: ‘3.5-23.5‘, ‘DB‘: ‘0.5-6.5‘, ‘IB‘: ‘1.0-17‘, ‘XT‘: ‘3.9-6.3‘, ‘GYSZ‘: ‘0.4-1.8‘, ‘DGC‘: ‘3.6-6.2‘, ‘GMDZDB‘: ‘0.8-1.5‘, ‘DMDZDB‘: ‘0.5-3.36‘, ‘PT‘: ‘11.0-14.0‘, ‘NXMYHDD‘: ‘70-50‘, ‘WBC‘: ‘3.5-9.5‘, ‘RBC‘: ‘4.3-5.8‘, ‘HB‘: ‘130-175‘, ‘PLT‘: ‘125-350‘, ‘BDL‘: ‘0-20‘, ‘HBsAg‘: ‘<1.0‘, ‘HBsAb‘: ‘<10.0‘, ‘HBeAg‘: ‘<1.0‘, ‘HBeAb‘: ‘>1.0‘, ‘HBcAb‘: ‘>1.0‘, ‘AFP‘: ‘0-20‘, ‘PIVK‘: ‘0-40‘}

    # 1.读取sheet2中需要处理的参数
    readSheet2(ExcelFullName)

    # 2.读取根据Sheet2中内容找到Sheet1中对应的列中的内容并进行处理
    readSheet1(ExcelFullName)

后续再进行补充。

借助openpyxl处理excel

标签:microsoft   mil   users   超出   文件中   pat   excel   class   mys   

原文地址:https://www.cnblogs.com/chenleideblog/p/11636905.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!