使用str.contains然后模糊匹配剩余元素

时间:2017-11-13 22:52:55

标签: python string pandas numpy match

我有一个数据框,其中包含一列字符串和一个我需要匹配的主列表。我希望将此匹配作为单独的列添加到数据框中。由于数据帧大约是100万行,我想首先做“字符串包含”,如果它不包含主列表中的字符串,我想在阈值85处模糊匹配它们,那么如果仍然没有匹配,只返回数据框列中的值。

m_list = [FOO,BAR,DOG]

df

 Name        Number_Purchased  

ALL FOO            1
ALL FOO            4
BARKY              2
L.T. D.OG          1
PUMPKINS           3

我正在努力实现这一结果:

df2

 Name        Number_Purchased   Match_Name    Match_Score

ALL FOO            1               FOO           100
ALL FOO            4               FOO           100
BARKY              2               BAR           95
L.T. D.OG          1               DOG           90
PUMPKINS           3               PUMKINS       25

我的代码如下所示:

def matches(df, m_list):
    if df['Name'].contains('|'.join(m_list)):
        return m_list, 100
    else:
    new_name, score = process.extractOne(df.name, m_list, scorer = fuzz.token_set_ratio)    
        if score > 85:
            return new_name, score
        else:
            return name, score

df['Match_Name'], df['Match_Score'] = zip(*df.apply(matches))

我已经多次编辑并且一直有错误“str”不包含属性“str”,或者导致问题的数组形状存在差异。如何调整此代码以使其具有功能,但也可以扩展到具有100万行的列?

0 个答案:

没有答案