回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我有一个包含信息的数据框,特别是像下面的数据框这样的地址:</p>
<pre><code> 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, Essex, PT7 6WA
5 1654 46, The Clewter,Great Durham, Essex, CD7 9HE
</code></pre>
<p>这些都是不同的格式,有些有逗号,有些没有,还有来自其他国家的地址示例。我想知道如何从这里提取地址,因为我想将它们与位置数据合并</p>
<p>这可能意味着在子字符串上进行合并或只是提取</p>
<p>我试过:</p>
<pre><code>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})$')
</code></pre>
<p>提取邮政编码,但这似乎不起作用,出现了9个参数的错误,其中应取1</p>
<p>我还尝试:</p>
<pre><code>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'}))
</code></pre>
<p>从这里开始:<a href="https://stackoverflow.com/questions/54756025/how-to-merge-pandas-on-string-contains">How to merge pandas on string contains?</a>但是在我的机器上运行需要很长时间,因为第二个数据帧中有170万个邮政编码需要匹配</p>
<p>预期产出为:</p>
<pre><code> col1 col2 col3
0 1303 674 Yellow Gardens,Tunbridge Wells, Kent TN5 4NP TN5 4NP
1 1205 154 Coller Crescent Runcorn,Cheshire WP6 4TY WP6 4TY
2 1504 122 Uphill Road,Rayleigh, Essex SF6 9VT SF6 9VT
3 1678 67 Lampoon Crescent,Billericay, Essex, CM52 0QY CM52 0QY
4 1897 32 Dovelane,Benfleet, Essex, PT7 6WA PT7 6WA
5 1654 46, The Clewter,Great Durham, Essex, CD7 9HE CD7 9HE
</code></pre>
<p>或(与基于邮政编码的第二个数据帧匹配):</p>
<pre><code> col1 col2 col3 (coords)
0 1303 674 Yellow Gardens,Tunbridge Wells, 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,Rayleigh, Essex SF6 9VT 54.65, 1.07
3 1678 67 Lampoon Crescent,Billericay, Essex, CM52 0QY 51.23, 0.95
4 1897 32 Dovelane,Benfleet, Essex, PT7 6WA 54.6, 2.23
5 1654 46, The Clewter,Great Durham, Essex, CD7 9HE 49.25, 1.23
</code></pre>
<p>任何帮助都将被感激,或者被指向正确的方向</p>
<p>多谢各位</p>
<p>*地址已更改,因此不是真实地址,但格式相同</p>