python 实现类似excel vlookup函数

最近在研究python实现excel的vlookup函数,在网上搜索了相关资料后发现满足不了我的业务需求,查找了相关资料后发现的大多数的实现方式是利用pandas的merge方法实现,我也借鉴了相关方法,但是结果与我的需求不符(可能是我的使用方式存在问题)。

VLOOKUP函数是Excel中的一个纵向查找函数,它与LOOKUP函数和HLOOKUP函数属于一类函数,在工作中都有广泛应用,例如可以用来核对数据,多个表格之间快速导入数据等函数功能。功能是按列查找,最终返回该列所需查询序列所对应的值;

本人刚接触python,如有不足之处,还请各位帮忙指正。

方法一:通过list在代码中进行操作,这个方法比较费时,暂时还没有比较节省时间的方法,还望各位能提点提点。

方法二:直接将excel的vlookup函数的参数在代码中生成,然后导出excel,excel会自动进行计算。

话不多说直接上代码:


方法一:

import pandas as pd


df1 = pd.read_excel("yourfile1path.xlsx", sheet_name='yourfilesheet')
df2 = pd.read_excel("yourfile2path.xlsx.xlsx", sheet_name='yourfile2sheet')
# 获取你需要vlookup的列
s = df1["Order"]
mo = df2['工令編碼']
listName = s.tolist()
moList = mo.tolist()
# 定义一个列表用来存储vlookup结果
result = []
flag = False
# 模拟vlookup
for i in range(len(listName)):
    for j in range(len(moList)):
        # print(i)
        # print(listName[i] == moList[j])
        # 判断是否有相等的值
        if (str(listName[i]).strip() == str(moList[j]).strip()):
            flag = True
            break
    #保证result的数据与取出来的数据位置一致
    if flag:
        result.append(listName[i])
        flag = False
    else:
        result.append('N/A')
# print(result)
# 准备数据
data = pd.DataFrame(result, columns=['result'])
# 将结果添加到1表的最后一列
resultdf = pd.concat([df1, data], axis=1)
#导出结果
resultdf.to_excel('result.xlsx', index=False)

参考博客:https://www.jianshu.com/p/1b95fb4bf033


方法二:

直接用代码在表格后面添加一列,将每行需要用到的vlookup函数参数填上,最后导出excel文件,excel会自动计算结果

表一:

python 实现类似excel vlookup函数_第1张图片

表二:

python 实现类似excel vlookup函数_第2张图片

结果:

python 实现类似excel vlookup函数_第3张图片

代码:

import pandas as pd


df1 = pd.read_excel("feng.xlsx", sheet_name='工作表1')
df2 = pd.read_excel("liu.xlsx", sheet_name='工作表1')
# 获取你需要vlookup的列
s = df1["姓名"]
mo = df2['姓名']
listName = s.tolist()
moList = mo.tolist()
# 定义一个列表用来存储vlookup结果
result = []
flag = False
for i in range(len(listName)):
    # for j in range(len(moList)):
    #     # print(i)
    #     # print(listName[i] == moList[j])
    #     if (str(listName[i]).strip() == str(moList[j]).strip()):
    #         flag = True
    #         break
    # #保证result的数据与取出来的数据位置一致
    # if flag:
    #     result.append(listName[i])
    #     flag = False
    # else:
    #     result.append('N/A')
    result.append("=VLOOKUP(A"+str(2+i)+",[liu.xlsx]工作表1!$A$2:$A$7,1,0)")
print(result)
# 准备数据
data = pd.DataFrame(result, columns=['result'])
# 将结果添加到1表的最后一列
resultdf = pd.concat([df1, data], axis=1)
#导出结果
resultdf.to_excel('result.xlsx', index=False)

git源码:https://github.com/lyf1141840426/excel.git

两种方法区别:

1.第二种时间花费相对较少

2.在excel文件中可以看到函数详情,以备核验(跟excel中的操作无异)

注:第一种方法参考博客完成,如侵权请联系删除

       第二种方法是突发奇想之后,抱着试一试的态度尝试之后的产物。

你可能感兴趣的:(编程,#python,python,pandas,excel)