我有一个包含信息的DataFrame,特别是下面的DataFrame之类的地址:
col1 col2
0 1303 674 Yellow Gardens,Tunbridge Wells,Kent TN5 4NP
1 1205 154 Coller Crescent Runcorn,Cheshire WP6 4TY
2 1504 122 Uphill Road,Rayleigh,Essex SF6 9VT
3 1678 67 Lampoon Crescent,Billericay,Essex,CM52 0QY
4 1897 32 Dovelane,Benfleet,PT7 6WA
5 1654 46,The Clewter,Great Durham,CD7 9HE
这些都是不同的格式,其中一些带有逗号,而另一些没有,并且还有来自其他国家/地区的地址示例。我想知道如何将其与位置数据合并,从而从此处提取地址。
这可能意味着在子字符串上合并或仅提取
我尝试过:
df["postcodes"] = df["address"].str.extract(r'^([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([A-Za-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9]?[A-Za-z])))) [0-9][A-Za-z]{2})$')
提取邮政编码,但这似乎不可行,并给出了9个参数的错误,给出了应该取1的位置。
我也尝试过:
rhs = (df1.address
.apply(lambda x: df2[df2.Postcode.str.find(x).ge(0)]['location'])
.bfill(axis=1)
.iloc[:,0])
(pd.concat([df1.app_nbr,rhs],axis=1,ignore_index=True)
.rename(columns={0: 'app_nbr',1: 'location'}))
从这里开始:How to merge pandas on string contains?,但是要在我的计算机上运行需要很长时间,因为第二个数据帧中有170万个邮政编码要匹配。
预期输出为:
col1 col2 col3
0 1303 674 Yellow Gardens,Kent TN5 4NP TN5 4NP
1 1205 154 Coller Crescent Runcorn,Cheshire WP6 4TY WP6 4TY
2 1504 122 Uphill Road,Essex SF6 9VT SF6 9VT
3 1678 67 Lampoon Crescent,CM52 0QY CM52 0QY
4 1897 32 Dovelane,PT7 6WA PT7 6WA
5 1654 46,CD7 9HE CD7 9HE
或(根据邮政编码与第二个数据框匹配):
col1 col2 col3 (coords)
0 1303 674 Yellow Gardens,Kent TN5 4NP 50.00,1.00
1 1205 154 Coller Crescent Runcorn,Cheshire WP6 4TY 51.23,1.05
2 1504 122 Uphill Road,Essex SF6 9VT 54.65,1.07
3 1678 67 Lampoon Crescent,CM52 0QY 51.23,0.95
4 1897 32 Dovelane,PT7 6WA 54.6,2.23
5 1654 46,CD7 9HE 49.25,1.23
我们将不胜感激,或者将任何帮助指向正确的方向。
谢谢
*地址已更改,因此不是真实的,但格式相同