2016-03-24 4 views
0

私は2つのExcelシートをそれぞれの名前の列に基づいてマージしようとしています。私は参考としてthisを使用しました。 DF1でDifflibを使用してExcelシートを結合する

名の列名の列が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') 

でDF2 Local Customerである私はこれを実行したときに、私は次のエラーを取得けれども:

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]を要求しています

lambda funcに条件を追加してください少なくとも1つの結果があるかどうかをテストします。

ここでは、一致する要素がない場合に元の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

関連する問題