首页 > 解决方案 > python - 从完整地址获取邮政编码

问题描述

我有一个列中包含完整地址的数据框,我需要创建一个仅包含邮政编码的单独列。一些地址只有五位数的邮政编码,而其他地址则有额外的四位数。

如何拆分列以获取邮政编码?

示例数据

d = {'name':['bob','john'],'address':['123 6th Street,Sterling VA 20165-7513','567 7th Street, Wilmington NC 28411']}
df = pd.DataFrame(d)

我尝试使用 rpartition 但我得到了邮政编码之前的所有内容:

df['test'] = df['address'].str.rpartition(" ")
print(df)
name    address                                test
bob     123 6th Street,Sterling VA 20165-7513  123 6th Street,Sterling VA
john    567 7th Street, Wilmington NC 28411    567 7th Street, Wilmington NC

这就是我想要得到的:

name    address                                zipcode
bob     123 6th Street,Sterling VA 20165-7513  20165-7513
john    567 7th Street, Wilmington NC 28411    28411

标签: pythonpandasdataframe

解决方案


使用正则表达式str.extract()

df['zip'] = df['address'].str.extract(r'(\d{5}\-?\d{0,4})')

返回:

   name                                address         zip
0   bob  123 6th Street,Sterling VA 20165-7513  20165-7513
1  john    567 7th Street, Wilmington NC 28411       28411

请参阅 上的 pandas 页面str.extract()和 上的 python 页面re

特别是,{5}指定我们必须匹配 5 个重复\d(一个数字),而{0,4}表示我们可以匹配 0 到 4 个重复。


推荐阅读