最近课程上布置了程序,要求使用编辑距离匹配两个excel中sheet中的数据。其中sheet1中给出了一些期刊全名以及影响因子,sheet2中给出了期刊全名以及对应的一些简称。要求是要将全名以及影响因子和对应的多个简称按照字母序列在sheet3中输出。但给出的数据sheet1和sheet2中有些期刊名的写法不一致,例如多出逗号,将and改写为&等,也有部分期刊名字相似但并非同一期刊。想问下各位针对以上的第二个问题相似但并非同一期刊该怎么筛选处理呢?目前我用编辑距离Levenshtein将sheet1和sheet2中的编辑距离最小的都匹配起来了。写法不一致的问题直接就能匹配上,但相似且非同一期刊的问题还没有思路。下面是我的代码。我是初学者,希望有人可以给我指点一二!
import pandas as pd
import Levenshtein as lv
import openpyxl as op
wb = op.load_workbook(r'C:\Users\Administrator\Desktop\实验1数据.xlsx')
ws = wb['sheet3']
df_1 = pd.read_excel(r'C:\Users\Administrator\Desktop\实验1数据.xlsx',sheet_name='sheet1')
df_2 = pd.read_excel(r'C:\Users\Administrator\Desktop\实验1数据.xlsx',sheet_name='sheet2')
df_3 = pd.read_excel(r'C:\Users\Administrator\Desktop\实验1数据.xlsx',sheet_name='sheet3')
df_4 = pd.read_excel(r'C:\Users\Administrator\Desktop\实验1数据.xlsx',sheet_name='sheet4')
ws4 = wb['sheet4']
ws1 = wb['sheet1']
diss_2 = []
count = 1
for column in df_1.loc[:,'A']:
diss_2.append(str(column))
diss_2.sort()
for i in range(11657):
ws4.cell(row = i + 1,column = 1).value = diss_2[i]
for i in range(11657):
for j in range(11657):
if ws4.cell(row = i + 1,column = 1).value == ws1.cell(row = j + 1,column = 2).value:
ws4.cell(row=i + 1, column=2).value = ws1.cell(row = j + 1,column = 3).value
def Set_1(m):
df_11 = str(ws4.cell(row = m + 1,column = 1).value)
df_22 = df_2.loc[:,'A']
diss_1 = []
for column in df_22:
distance = lv.distance(str(df_11).lower(),str(column).lower())
diss_1.append(distance)
k = diss_1.index(min(diss_1))
k_1 = min(diss_1)
if k_1 > 5:
global count
ws.cell(row = m + 1,column = 1).value = count
count = count + 1
return
else:
ws.cell(row=m + 1, column=1).value = ws4.cell(row=m + 1, column=1).value
ws.cell(row=m + 1, column=2).value = ws4.cell(row=m + 1, column=2).value
ws.cell(row=m + 1, column=3).value = df_2.loc[k, 'B']
ws.cell(row=m + 1, column=4).value = df_2.loc[m, 'C']
ws.cell(row=m + 1, column=5).value = df_2.loc[m, 'D']
for i in range(11660):
Set_1(i)
wb.save(r'C:\Users\Administrator\Desktop\实验1数据.xlsx')
你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答
本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。
因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。