python实现等同于excel的Lookupv函数处理excel文件

VLOOKUP使用示范
vlookup就是竖直查找,即列查找。通俗的讲,根据查找值参数,在查找范围的第一列搜索查找值,找到该值后,则返回值为:以第一列为准,往后推数查找列数值的这一列所对应的值。这也是为什么该函数叫做vlookup(v为vertical-竖直之意,lookup即时英文的查找之意)
现有如下手机的每日销售毛数据(图左),A分销商需要提供四个型号的销售数据(图右)
这里写图片描述

类似的要处理一个庞大文件的根据男女不同身高体重不同,重新匹配合适的尺码。
这里写图片描述

下面是实现的代码:

#-*- coding:utf-8 -*-
import xlrd
import xdrlib,sys

data = xlrd.open_workbook('name.xlsx')
table = data.sheets()[0]
nrows = table.nrows
ncols = table.ncols

#map_nan 为得到的对比数据
map_man= [[0 for i in range(20)] for i in range(20)]

#map_women得到的女性对比数据
map_women=[[0 for i in range(20)]for i in range(20)]


#得到第6列的性别
for i in range(1,nrows):
    xingbie = table.row_values(i)[5]

#对第二体重的数据进行取整(例如:5,10,15...)
for i in range(1,nrows):
    tizhong=0
    tizhong=table.row_values(i)[1]
    if tizhong=='':
        tizhong=60 # 没有体重,默认 60kg
    if(tizhong %5==0):
        tizhong=float(tizhong)
    else:
        tizhong=float((int(tizhong)/int(5) +1)*5)
    table.put_cell(i, 1, 2, tizhong, 0)

#对第四列身高的数据进行取整(例如:5,10,15...)
for i in range(1,nrows):
    shengao=table.row_values(i)[3]

    if  shengao == '':
        shengao = 170.0  # 没有身高,默认 170
    if(not isinstance(shengao, float) ):
        shengao=170.0
    if (  shengao % 5 == 0):
        shengao = float(shengao)
    else:
        shengao = float((int(shengao /5 + 1) * 5))
    table.put_cell(i, 3, 2,  shengao, 0)

#对比对的男性别数据进行存储
for i in range(9):

    for j in range(12):
        shuju=table.row_values(i+2)[j+9]
        map_man[i][j]=shuju

#对比对的女性别的数据进行存储
for i in range(6):

    for j in range(8):
        shuju = table.row_values(i + 2)[j + 23]
        map_women[i][j]=shuju

chima=[]
#得到第6列的性别
for i in range(1,nrows):
    xingbie = table.row_values(i)[5]
    if xingbie==u'\u7537': #xingbie=="男"
        shengao=table.row_values(i)[3]
        tizhong=table.row_values(i)[1]
        if tizhong>105.0:
            tizhong=105.0
        chima.append(map_man[int((shengao-160)/5)][int((tizhong-50)/5)])

    else:  #xingbie=="女"
        shengao = table.row_values(i)[3]
        tizhong = table.row_values(i)[1]
        if tizhong > 75.0:
            tizhong = 75.0
        chima.append(map_women[int((shengao - 150) / 5)][int((tizhong - 40) / 5)])
#得到最终的数据
for i in range(len(chima)):
    name=table.row_values(i+1)[0]
    print name,chima[i]

结果的截图:
这里写图片描述

附上github 代码的地址:
github地址

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝鲸123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值