python-从完整地址获取邮政编码

时间:2019-07-05 20:27:38

标签: python pandas dataframe

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

如何将列拆分为仅获取邮政编码?

示例数据

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

3 个答案:

答案 0 :(得分:2)

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

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

尤其是,{5}指定必须匹配\d(一个数字)的5个重复,而{0,4}则表明我们可以匹配0到4个重复。

答案 1 :(得分:1)

您可以尝试

df['zip']= [i[-1] for i in df.address.str.split(' ').values]

答案 2 :(得分:0)

您需要分割空格,获取最后一项,然后获得邮政编码。

类似这样的东西:

zipcodes = list()

for item in d['address']:
    zipcode = item.split()[-1]
    zipcodes.append(zipcode)

d['zipcodes'] = zipcodes
df = pd.DataFrame(d)