最近在研究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会自动计算结果
表一:
表二:
结果:
代码:
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中的操作无异)
注:第一种方法参考博客完成,如侵权请联系删除
第二种方法是突发奇想之后,抱着试一试的态度尝试之后的产物。