2016-03-24 3 views
0

Я пытался объединить два листа excel вместе на их собственные столбцы имен. Я использовал this в качестве ссылки.Использование Difflib для объединения листов Excel

В df1 столбце Имя является Local Customer df2 столбец имя Client

import difflib 
import pandas as pd 

path= 'C:/Users/Rukgo/Desktop/Match thing/' 

df1=pd.read_excel(path+'2015_TXNs.xls') 
df2=pd.read_excel(path+'Pipeline.xls') 
df2['Client'] = df2['Client'].apply(lambda x: difflib.get_close_matches(x, df1['Local Customer'])[0]) 

result = df1.join(df2) 

result.to_excel(path+'maybe.xls') 

Хотя, когда я запускаю это я получаю следующее сообщение об ошибке:

File "C:/Users/Rukgo/Desktop/Match Things/untitled3.py", line 16, in <lambda> 
df2['Client'] = df2['Client'].apply(lambda x: difflib.get_close_matches(x, df1['Local Customer'])[0]) 

IndexError: list index out of range 

ответ

1

Это означает, что иногда, не близко найдены совпадения, но вы запрашиваете первый элемент [0] пустого списка

Добавить условие в вашу лямбду func чтобы проверить, есть ли хотя бы один результат.

Вот код, если вы решили сохранить элемент исходного DataFrame в случае отсутствия согласованного элемента.

def replacement(x, **kwargs): 
    matches = difflib.get_close_matches(x, kwargs['l']) 
    if (matches): 
     return matches[0] 
    else: 
     return x 


df2['Client'] = df2['Client'].apply(replacement(x, l=df1['Local Customer'])) 
+0

Удивительно, что не вызывает никаких ошибок! Спасибо. Хотя, когда я открываю новый лист excel, все заголовки из 'df2' находятся там без какой-либо информации – Rukgo