具有部分字符串匹配的两个熊猫数据帧之间的映射/压缩

时间:2019-04-01 21:20:50

标签: python string dataframe matching fuzzy

我有两个大小分别为1,000,000行的数据框。两者共享一个公共的“地址”列,我正在使用该列来加入数据框。通过这种联接,我希望将信息(我称为“详细信息”)从dataframe1移动到dataframe2。

df2.details = df2.Address.map(dict(zip(df1.Address,df1.details)))

但是,地址栏并没有显示出全部的共同点。我尽了最大努力进行清理,但仍然只能移动大约40%的数据。有没有办法修改我上面的代码以允许部分匹配?我完全被这个困扰。

数据非常简单。两个小数据框。伪造的示例数据如下:

df1 
Address                                    Details
Apt 15 A, Long Street, Fake town, US       A   


df2
Address                                    Details
15A, Long Street, Fake town, U.S.              

1 个答案:

答案 0 :(得分:0)

首先,我建议执行join操作,并识别每个数据帧中不完全匹配的行。确定了这些行后,请排除其他行并继续执行以下建议:

  • 一种方法是解析地址并尝试标准化 他们。您可以尝试使用 usaddress模块 标准化您的地址。

  • 您也可以尝试使用针对this question的推荐方法, 尽管他们可能会针对您的情况进行一些调整。很难说 没有部分字符串匹配的多个示例。

  • 另一种方法是使用Google Maps API(或Bing或 MapQuest)用于地址标准化,尽管有超过一百万行 对于每个数据帧,您每天都会剥离免费的API调用,并且 需要为此服务付费。

  • 最后的建议是使用 fuzzywuzzy 模糊(近似)字符串匹配的模块。