使用模糊匹配条件匹配多列的数据

时间:2018-03-21 03:36:51

标签: python pandas dataset fuzzywuzzy

我正在做一个类似的项目:Data matching algorithm

其中,我有一个数据框(dataset1),其中包含客户详细信息,没有特殊的唯一ID,然后将其与具有相同字段和特殊唯一ID的数据框2(dataset2)进行匹配。

实施例: Dataset1列包括:

标题,姓氏,名字,中/其他姓名,地址,DOB,性别,医疗保健号码

dataset2列包括:

唯一身份证,职衔,姓氏,名字,中/其他姓名,地址,DOB,性别,医疗保健号码

我的计划:

我的数据集1是~500,000行w / 11左右列 - 如果需要,可以拆分行数。数据集2约为2,000,000

基于业务的匹配标准,例如。 > 5列必须匹配,并且可能是模糊组件,例如在一个数据集中连字符(包括其他特殊字符)但在另一个数据集中没有连字符的名称。

根据近似匹配,此ID和数据集2中的字段将复制到相邻列中的数据集1中,并与整体匹配%。

然后,业务可以提取和检查整体匹配%范围。

我计划将Panda与Fuzzywuzzy一起使用。 我在编写代码逻辑的技术方法时遇到了麻烦。

我应该查看匹配的第一个字段,然后过滤下一列,依此类推?我是这么认为的,但循环如何在两个比较数据集中的列中移动? 我是否需要将每个比较操作写回数据集进行存储,还是将其保存在其他地方?

可能有效的替代方案是,我将所有列连接成一个列,并将这些列匹配,并返回匹配的ID,其他字段和匹配的%。

我正在寻找最好的方向,以及最佳方式的一般逻辑。

1 个答案:

答案 0 :(得分:1)

一般来说:尝试,观察,调整和重复。

在使用Fuzzywuzzy之前,可能值得探索任何小的调整来标准化并使数据尽可能一致。

  • 有些数据集可以使用555-555-5555,0或 - 用于空白电话号码或1970年1月1日用于空白DOB。 Dataframe.replace({column:{to_replace:replace_val})可以帮助清理它们。

  • Python的dateutil.parser有助于标准化各种日期格式。

  • 在分析之前,尝试包装模糊比并从姓氏中删除标点符号。

  • 地址:Pandas.column.str.upper()可用于应用一致的大小写。尝试没有标点符号。

  • 连接所有字段可能是完全匹配的良好第一遍。第二遍可以评估不太重要的字段,如性别和标题,以便缺少数据。

一般情况下,您可能希望分层接近,删除直接匹配,然后删除最确定的匹配,重新评估,直到下一波所需的工作量接近您考虑减少此项目的回报为止。

如果按列进行处理,您可能希望删除某些匹配项,然后从姓氏开始,然后创建下一个最具确定性列的选项列表,并使用fuzzywuzzy的process.extract来协助决策树。可能还有一种我不了解的更好的方法!