使用Difflib组合Excel工作表

时间:2016-03-24 22:49:24

标签: python excel pandas difflib

我一直在尝试根据自己的名称列合并两个excel表。我使用this作为参考。

在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 :(得分:1)

这意味着有时候,找不到紧密匹配,但是你要求空列表的第一个元素[0]

在lambda函数中添加一个条件,以测试是否至少有一个结果。

如果您决定在没有匹配元素的情况下保留原始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'] ) )