【问题标题】:How to find the string match between 2 Excel files and return the match percentage in python?如何找到 2 个 Excel 文件之间的字符串匹配并在 python 中返回匹配百分比?
【发布时间】:2023-01-12 15:42:58
【问题描述】:

我有 2 个 Excel 文件,其中包含名称作为唯一的列:

File 1: file1.xlsx

Names
Vinay adkz
Sagarbhansali
Jeffery Jonas
Kiara Francis
Dominic 

File 2: file2.xlsx

Names:
bhansali Sagar
Dominic
Jenny
adkzVinay

Sample Output:
I want to match the names in file 1 with names in file 2, and i am trying to get an output like the below :

Names         File2Matchname.  Match%
Vinay adkz.     adkzVinay.       98%
Sagarbhansali.  bhansali sagar   97%
Jeffery Jonas       NA            0%
Kiara Francis       NA            0%
Dominic          Dominic         100%



上面的逻辑是否可以通过任何逻辑到达 python ?

我尝试在 Excel 中执行此操作,但 vlookup 对匹配% 没有帮助。我知道这对于使用表相似度的 python 是可能的,但我无法获得可以到达输出的逻辑。

任何帮助将非常感激。

【问题讨论】:

  • 你试过什么?可重现代码在哪里?
  • 我已经在 Excel 中尝试使用普通的 vlookup 我不知道如何在 python 中完成它。

标签: python-3.x


【解决方案1】:

您可以使用 Pandas 并使用 python 的内置 difflib 库,它有一个名为 difflib.SequenceMatcher() 的函数来查找两个名称之间的最长公共子串。

示例代码:

import pandas as pd
import difflib

#For testing
dict_lists = {"Names":["Vinay adkz", "Shailesh", "Seema", "Nidhi","Ajitesh"]}
dict_lists2 = {"Names":["Ajitesh", "Vinay adkz", "Seema", "Nid"]}

# Excel to  dataframes
df1 = pd.DataFrame(dict_lists) #pd.read_excel('file1.xlsx')
df2 = pd.DataFrame(dict_lists2) #pd.read_excel('file2.xlsx')

# Empty lists to stor matched name, match percentage
match_name = []
match_percent = []

# Iterate through the first dataframe
for i, row in df1.iterrows():
    name = row['Names']
    match = difflib.get_close_matches(name, df2['Names'], n=1, cutoff=0.8)
    if match:
        match_name.append(match[0])
        match_string = difflib.SequenceMatcher(None, name, match[0]).find_longest_match(0, len(name), 0, len(match[0]))
        match_percentage = (match_string.size / len(name)) * 100
        match_percent.append(match_percentage)
    else:
        match_name.append('NA')
        match_percent.append(0)
      

df1['File2names'] = match_name
df1['Match_per'] = match_percent
print(df1)

# Write in Excel
# df1.to_excel('output.xlsx', index=False)

我希望这可以帮助你。这是我第一次在这里回答问题。 另请阅读:How to use SequenceMatcher to find similarity between two strings?

【讨论】:

  • 非常感谢您抽出时间提供帮助。
猜你喜欢
  • 1970-01-01
  • 2012-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-05
相关资源
最近更新 更多