python动态模糊逻辑连接

python动态模糊逻辑连接,python,pandas,fuzzy-logic,Python,Pandas,Fuzzy Logic,我试图为两个表创建一个动态模糊逻辑联接。我所说的动态是指允许参数指定允许两个表连接的变量。 下面提到的代码是以下链接下静态代码的修改版本: 我已经编译了下面的动态代码: import pandas as pd import datetime from fuzzywuzzy import fuzz import difflib donors = pd.DataFrame({"name": pd.Series(["John Doe","John Doe","Tom Smith","Jane D

我试图为两个表创建一个动态模糊逻辑联接。我所说的动态是指允许参数指定允许两个表连接的变量。 下面提到的代码是以下链接下静态代码的修改版本:

我已经编译了下面的动态代码:

import pandas as pd
import datetime
from fuzzywuzzy import fuzz
import difflib 

donors = pd.DataFrame({"name": pd.Series(["John Doe","John Doe","Tom Smith","Jane Doe","Jane Doe","Kat test"]), "Email": pd.Series(['a@a.ca','a@a.ca','b@b.ca','c@c.ca','something@a.ca','d@d.ca']),"Date": (["27/03/2013  10:00:00 AM","1/03/2013  10:39:00 AM","2/03/2013  10:39:00 AM","3/03/2013  10:39:00 AM","4/03/2013  10:39:00 AM","27/03/2013  10:39:00 AM"])})
fundraisers = pd.DataFrame({"name": pd.Series(["John Doe","John Doe","Kathy test","Tes Ester", "Jane Doe"]),"Email": pd.Series(['a@a.ca','a@a.ca','d@d.ca','asdf@asdf.ca','something@a.ca']),"Date": pd.Series(["2/03/2013  10:39:00 AM","27/03/2013  11:39:00 AM","3/03/2013  10:39:00 AM","4/03/2013  10:40:00 AM","27/03/2013  10:39:00 AM"])})
donors["Date"] = pd.to_datetime(donors["Date"], dayfirst=True)
fundraisers["Date"] = pd.to_datetime(donors["Date"], dayfirst=True)
donors["code"] = donors.apply(lambda row: str(row['name'])+' '+str(row['Email']), axis=1)
idx = donors.groupby('code')["Date"].transform(min) == donors['Date']
donors = donors[idx].reset_index().drop('index',1)

def get_donors_v1(fund_var,don_var, don_tab,row=None):
    d = don_tab.apply(lambda x: fuzz.ratio(x["%s" % don_var], 'row["%s" %fund_var]') * 2, axis=1)
    d = d[d >= 75]
    if len(d) == 0:
        v = ['']*3
    else:
        v = don_tab.ix[d.idxmax(), ["%s"% don_var ,'Email','Date']].values
    return pd.Series(v, index=['donor name', 'donor email', 'donor date'])

trial=pd.concat((fundraisers, fundraisers.apply(get_donors_v1(fund_var="name",don_var="name",don_tab=donors), axis=1)), axis=1)
我得到以下错误:

TypeError:get\u v1()正好接受4个参数(给定3个)

我是否应将该函数替换为:

get_donors_v1(row=None,fund_var,don_var, don_tab)
然后我得到以下错误:

TypeError:(“'NoneType'对象没有属性'getitem”, u'出现在索引0'处)


请提供帮助。

在您的代码示例中,为参数“row”提供了get\u supersators()的值None。在下一行中,您将尝试使用行作为映射(行[%s”%fund_var]),而不测试对象是否存在,即:not等于None


对像“row[%s”%fund\u var]这样的对象进行索引会导致调用getitem方法,但实际上没有调用该方法。

在您的代码示例中,为参数“row”提供了值None的get\u providers()。在下一行中,您将尝试使用行作为映射(行[%s”%fund_var]),而不测试对象是否存在,即:not等于None


对像“row[%s”%fund\u var]这样的对象进行索引会导致调用getitem方法,而实际上没有任何方法可以调用它。

我认为必须将默认值放在末尾,所以get\u v1(fund\u var,don\u var,don\u tab,row=None)可以做到这一点。您好,Guido,我试过这个。没有帮助:(我认为默认值必须放在末尾,所以get_Visors_v1(fund_var,don_var,don_tab,row=None)可以做到这一点吗?你好,Guido,我尝试了这个。没有帮助:(你好,user508402,我修改了帖子。我尝试了你的解决方案,但得到了这个类型错误:(“'Series'对象不可调用,u'发生在索引0')。我正在学习Python-如果我的查询看起来很迂腐,我很抱歉。您好,Seb.“xxxx不可调用”错误意味着调用对象就像调用函数一样,因此其标识符后面跟着一个左括号。例如:mySeries()。找到引发错误的行,并在该行中找到正在调用的series对象。请注意,它不应该像“pd.series(…)”,因为它是合法的构造函数。您好user508402,我修改了帖子。我尝试了您的解决方案,但得到了以下类型错误:(“'series'对象不可调用”,u'发生在索引0')。我正在学习Python-如果我的查询看起来很迂腐,我很抱歉。您好,Seb.“xxxx不可调用”错误意味着调用对象就像调用函数一样,因此其标识符后面跟着一个左括号。例如:mySeries()。查找引发错误的行以及在该行中调用的series对象。请注意,它不应像“pd.series(…)”,因为它是合法的构造函数。