使用部分字符串匹配在两个Pandas数据帧之间进行映射/压缩

问题描述 投票:0回答:1

我有两个大小约为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.              
python string dataframe matching fuzzy
1个回答
0
投票

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

  • 一种方法是解析地址并尝试将它们标准化。您可以尝试使用usaddress模块来标准化您的地址。
  • 您也可以尝试回答this question建议的方法,尽管他们可能会对您的情况进行一些调整。如果没有部分字符串匹配的多个示例,很难说。
  • 另一种方法是使用Google Maps API(或Bing或MapQuest)进行地址标准化,但每个数据框有超过一百万行,您将远离去掉每天免费的API调用,并且需要为该服务付费。
  • 最后的建议是使用fuzzywuzzy模块进行模糊(近似)字符串匹配。
© www.soinside.com 2019 - 2024. All rights reserved.