python - 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
解决方案
使用正则表达式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 个重复。
推荐阅读
- python - how to convert a multiple python files into one ipynb file?
- android - Transparent Toolbar is Gray
- r - How to write R code for mcmc of a changepoint logistic model
- node.js - Firebase Cloud Functions 在实时数据库 onCreate 上获取数据
- http - FLUTTER How to implement Digest Authentification
- timeout - Axios - ERR_EMPTY_RESPONSE on long lasting requests
- python - 给定时间原点,如何将日期时间从十进制转换为“%y-%m-%d %H:%M:%S”?
- angular - How do I fill in an input using javascript on an angular site?
- indexing - 能否以编程方式构建 Sitecore Lucene 索引?
- swift - Apple“延迟照明”在我的 MacBook Pro 2018 和 Vega 20 上都是绿色的