addresses = ["xxx Richardson, TX", "xxyy Wylie, TX WO-65758"]
for a in addresses:
asplit = a.split(",")
city = asplit[0].split()[-1]
state = asplit[1].split()[0]
print(", ".join([city, state]))
#Richardson, TX
#Wylie, TX
示例
如果您有以下数据帧:
^{pr2}$
您可以定义拆分函数:
^{3}$
然后apply()返回address列,这将返回两个新列,join()返回原始数据帧:
df.join(
df['Address'].apply(
lambda x: pd.Series(extract_city_state(x), index=["City", "State"])
)
)
# Address City State
#0 xxx Richardson, TX Richardson TX
#1 yyy Plano, TX Plano TX
#2 xxyy Wylie, TX WO-65758 Wylie TX
#3 zzz Waxahachie, TX WO-999786 Waxahachie TX
选项2:使用正则表达式
如果这不起作用,那么使用regex模式进行匹配怎么样?在
这个应该有用:
import re
pattern = r"[A-Z][a-z]+,\s[A-Z]{2}"
for a in addresses:
matches = re.finditer(pattern, a, re.MULTILINE)
for match in matches:
city, state = match.group().replace(",", "").split()
print(", ".join([city, state]))
#Richardson, TX
#Wylie, TX
选项1:逗号拆分
它是否可以简单到用逗号拆分字符串,然后在拆分后使用最后一个标记/第一个标记?在
示例
如果您有以下数据帧:
^{pr2}$您可以定义拆分函数:
^{3}$然后
apply()
返回address列,这将返回两个新列,join()
返回原始数据帧:选项2:使用正则表达式
如果这不起作用,那么使用regex模式进行匹配怎么样?在
这个应该有用:
哪一个匹配:
[A-Z]
:一个大写字母[a-z]+
:任意数量的小写字母,\s
:逗号后跟空格[A-Z]{2}
:2个大写字母Demo on Regex101
示例
注意事项
我不太明白您想要得到什么,只需将列分开,得到最后两个元素,即城市和州?也许下面的代码可以帮助你。在
update:(我更改了第2行的数据,使其包含空格)
^{pr2}$结果:
^{3}$与其重新设计轮子,不如考虑使用现有的地址解析库。有不止一个,所以你可能需要做一些比较。https://github.com/datamade/usaddress是我过去用过的。在
相关问题 更多 >
编程相关推荐