python - 根据从模式派生的条件替换列中的值(如果需要,可能是正则表达式)
问题描述
我有一列家庭地址,需要根据几种模式“清理”和预处理。例如:
我做了以下事情:
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
”。因此,我需要仔细选择括号内的第一个整数,并将其放在地址行中第一个出现的整数旁边(带有正斜杠)。
第二个例子是“ 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*$
并将所有内容替换为\1/\2 \3
如果您遇到任何样本问题,请告诉我,我会根据需要改进正则表达式。当您将它们作为图像发布时,很难使用您的示例数据。请避免以图片和文字形式发布。
示例 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'\1/\2 \3', 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
推荐阅读
- c# - VS 2017 MVC 错误“/”应用程序中的服务器错误
- typescript - 如何使用 typescript 设置 vue.config.js?
- python-3.x - Python MIP 无法添加二进制变量向量
- python - 我们如何将字符串添加到 int,我们是否需要转换其中任何一个?
- python - Flask,如何返回具有外键值的类实例
- python - 不理解 Python 中的错误消息:AttributeError: 'dict' object has no attribute 'append'
- shell - 在 shell 脚本中,我的文件是 .TXT 文件,其中包含名称。我想执行命令 echo $firstname 它打印姓氏
- javascript - 禁用从自动完成多个primeng中删除项目的选项
- c# - 为 AzureFunction 设置 Serilog
- sequelize.js - 在 Sequelize 中使用 afterCreate 钩子更新另一个表