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会自动计算结果

表一:

表二:

结果:

代码:

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中的操作无异)

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

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

  • 9
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用 Python 的 `pandas` 库来实现 Excel 的 `VLOOKUP` 函数的功能。 首先,需要使用 `pandas.read_excel()` 函数读取 Excel 文件,然后使用 `pandas.DataFrame.merge()` 函数将两个表格合并。具体来说,可以这样做: ```python import pandas as pd # 读取 Excel 文件 df1 = pd.read_excel('file1.xlsx') df2 = pd.read_excel('file2.xlsx') # 将两个表格合并 result = pd.merge(df1, df2, on='ID', how='left') ``` 在上面的代码,`df1` 和 `df2` 分别代表两个表格,`ID` 是这两个表格用于匹配的列名。`how='left'` 表示使用左连接,即保留 `df1` 的所有行,并在可能的情况下匹配 `df2` 的行。 合并后的结果保存在 `result` ,它是一个新的表格,其包含 `df1` 和 `df2` 的所有列,并在可能的情况下包含匹配的行。 注意,在使用 `pandas.merge()` 函数时,需要指定用于匹配的列名,这在 Excel 的 `VLOOKUP` 函数也是必需的。 此外,如果要在合并后的表格查找特定的值,可以使用 `pandas.DataFrame.loc[]` 函数,例如: ```python # 在合并后的表格查找 ID 为 123 的行 row = result.loc[result['ID'] == 123] ``` 希望这些信息对您 ### 回答2: Python可以使用openpyxl库来实现类似ExcelVLOOKUP函数的功能。下面是一个简单的示例: ```python from openpyxl import load_workbook def vlookup(lookup_value, lookup_range, return_column): # 加载Excel文件 workbook = load_workbook('data.xlsx') # 选择工作表 worksheet = workbook['Sheet1'] # 定义返回值变量 result = None # 查找匹配值的行 for row in lookup_range: if row[0].value == lookup_value: # 获取返回列的值 result = row[return_column - 1].value break # 关闭工作簿 workbook.close() return result # 使用vlookup函数 result = vlookup('A', worksheet['A2:B4'], 2) print(result) ``` 在这个例子,我们定义了一个vlookup函数,它接受三个参数:查找值(lookup_value),查找范围(lookup_range),返回列(return_column)。 函数首先加载一个名为"data.xlsx"的Excel文件。然后,选择工作表"Sheet1"。 接下来,它通过遍历查找范围的每一行来找到匹配值的行。如果找到了匹配值,它将返回列的值存储在result变量,并使用break语句跳出循环。 最后,函数关闭工作簿并返回查找结果。 在示例,我们使用vlookup函数来查找'A'在A2:B4范围内的匹配值,并返回对应的第2列的值。 请注意,你需要安装openpyxl库,并将要查找的Excel文件命名为"data.xlsx",并确保工作表名为"Sheet1"。 ### 回答3: 要实现 Excel VLOOKUP 函数的功能,可以使用 openpyxl 库来操作 Excel 文件,并通过代码实现相同的功能。以下是一个简单的示例: ```python import openpyxl def vlookup(lookup_value, table_range, col_index): wb = openpyxl.load_workbook('data.xlsx') ws = wb.active for row in ws[table_range]: if row[0].value == lookup_value: return row[col_index - 1].value return None result = vlookup('Tom', 'A2:C10', 2) print(result) ``` 首先,需要安装 openpyxl 库,在代码导入该库。 在 `vlookup` 函数,首先加载 Excel 文件,并获取当前活动的工作表。 然后,通过遍历指定的范围(在示例为 `'A2:C10'`),找到匹配的行,并返回指定列的值。 最后,使用示例的 `vlookup` 方法来执行 VLOOKUP 函数。在此示例,它将在 data.xlsx 文件的活动工作表找到名为 'Tom' 的值,并返回其对应的第二列的值。 请注意,此示例仅演示了如何使用 openpyxl 库实现 VLOOKUP 函数的基本功能。在实际应用,可能需要根据具体需求进一步定制和调整代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值