我有两个大小分别为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.
答案 0 :(得分:0)
首先,我建议执行join
操作,并识别每个数据帧中不完全匹配的行。确定了这些行后,请排除其他行并继续执行以下建议:
一种方法是解析地址并尝试标准化 他们。您可以尝试使用 usaddress模块 标准化您的地址。
您也可以尝试使用针对this question的推荐方法, 尽管他们可能会针对您的情况进行一些调整。很难说 没有部分字符串匹配的多个示例。
另一种方法是使用Google Maps API(或Bing或 MapQuest)用于地址标准化,尽管有超过一百万行 对于每个数据帧,您每天都会剥离免费的API调用,并且 需要为此服务付费。
最后的建议是使用 fuzzywuzzy 模糊(近似)字符串匹配的模块。