2016-03-24 11 views
0

Ich habe versucht, zwei Excel-Tabellen zusammenführen basierend auf ihren eigenen Namen Spalten. Ich habe this als Referenz verwendet.Verwenden von Difflib zum Kombinieren von Excel-Tabellen

In df1 der Namensspalte ist Local Customer df2 der Name Spalte ist 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') 

Obwohl, wenn ich das laufen bekomme ich eine der folgenden Fehler:

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 

Antwort

1

Es bedeutet, dass manchmal, nein schließen Übereinstimmungen gefunden, aber Sie fragen nach dem ersten Element [0] einer leeren Liste

Fügen Sie eine Bedingung zu Ihrem Lambda-Funktion testen, ob mindestens ein Ergebnis vorliegt.

Hier ist der Code, wenn Sie sich entscheiden, das Element des ursprünglichen DataFrame im Falle eines fehlenden Elements zu behalten.

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

Awesome, die keine Fehler wirft! Danke. Aber wenn ich das neue Excel-Blatt öffne, sind alle Header von 'df2' mit keiner der Informationen da – Rukgo

Verwandte Themen