根据从模式派生的条件替换列中的值(如果需要,可能是正则表达式)

Replace values in a column based on conditions derived from patterns (possibly Regular expressions if needed)

我有一列家庭住址需要 "cleaned" 并根据多种模式进行预处理。例如:

我做了以下事情:

import pandas as pd
import re

df = pd.read_csv("SampleData.csv")
df['Address'] = (df['Address'].str.split()).str.join(' ')
df.head(10)

索引1,显示地址“9 (4f7) Adam Road”。只关注“(4f7)” 它提供的模式是空格,括号,整数,字符,括号,空格。

这个地址的输出应该是“9/4 Adam Road”。因此,我需要仔细 select 括号内的第一个整数,并将其放在地址行中第一个出现的整数旁边(使用正斜杠)。

第二个例子是,“1 (Flat 12) Subang Heights, Slateford,

第二个例子的输出应该是:“1/12 Subang Heights, Slateford”。在这里,我必须删除单词 Flat 并将整数 12 放在第一个出现的整数旁边。还有一些逗号和符号也需要删除。

解决这个问题的最佳建议是什么?应该是正则表达式还是任何其他 Python 适用的技术?

有处理此类模式经验的人可以帮助我吗?

更新 1(使用的数据):

18/8 Andy Pitt Drive
9 (4f7) Adam Road
2nd Floor, 12 China Town
1 Kuala Lumpur Park
23 KingsRoad North
81 (5F2) Prince Street
45/2 Brian's Court
1/2 Ships Corner
9/1 Eagle's Eye
1 (Flat 12) Subang Heights, Slateford,

您可以使用此正则表达式捕获两组中的第一个数字和第二个数字以及第三组中剩余的字母地址,

^(\d+)\D+(\d+).*?\s+([a-zA-Z]+.*?)\W*$

并将所有内容替换为 /

Demo

如果您在使用任何示例时遇到任何问题,请告诉我,我会根据需要改进正则表达式。当您 post 将它们作为图像编辑时,很难使用您的示例数据。请避免 post 作为图像和 post 作为文本。

示例 Python 代码,

import re

arr = ["18/8 Andy Pitt Drive","9 (4f7) Adam Road","2nd Floor, 12 China Town","1 Kuala Lumpur Park","23 KingsRoad North","81 (5F2) Prince Street","45/2 Brian's Court","1/2 Ships Corner","9/1 Eagle's Eye","1 (Flat 12) Subang Heights, Slateford,"]

for s in arr:
 print(s, '-->', re.sub(r'^(\d+)\D+(\d+).*?\s+([a-zA-Z]+.*?)\W*$', r'/ ', s))

打印,

18/8 Andy Pitt Drive --> 18/8 Andy Pitt Drive
9 (4f7) Adam Road --> 9/4 Adam Road
2nd Floor, 12 China Town --> 2/12 China Town
1 Kuala Lumpur Park --> 1 Kuala Lumpur Park
23 KingsRoad North --> 23 KingsRoad North
81 (5F2) Prince Street --> 81/5 Prince Street
45/2 Brian's Court --> 45/2 Brian's Court
1/2 Ships Corner --> 1/2 Ships Corner
9/1 Eagle's Eye --> 9/1 Eagle's Eye
1 (Flat 12) Subang Heights, Slateford, --> 1/12 Subang Heights, Slateford