Dre*_*ead 4 python dataframe pandas
我有一个数据框,其中一列中有完整地址,我需要创建一个仅包含邮政编码的单独列。有些地址只有五位数字的邮政编码,而其他地址则有额外的四位数字。
如何拆分列以获取邮政编码?
示例数据
d = {'name':['bob','john'],'address':['123 6th Street,Sterling VA 20165-7513','567 7th Street, Wilmington NC 28411']}
df = pd.DataFrame(d)
Run Code Online (Sandbox Code Playgroud)
我尝试使用 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
Run Code Online (Sandbox Code Playgroud)
这就是我想要得到的:
name address zipcode
bob 123 6th Street,Sterling VA 20165-7513 20165-7513
john 567 7th Street, Wilmington NC 28411 28411
Run Code Online (Sandbox Code Playgroud)
使用正则表达式str.extract():
df['zip'] = df['address'].str.extract(r'(\d{5}\-?\d{0,4})')
Run Code Online (Sandbox Code Playgroud)
返回:
name address zip
0 bob 123 6th Street,Sterling VA 20165-7513 20165-7513
1 john 567 7th Street, Wilmington NC 28411 28411
Run Code Online (Sandbox Code Playgroud)
请参阅 上的 pandas 页面str.extract()和 上的 python 页面re。
特别是,{5}指定我们必须匹配\d(数字)的 5 次重复,而{0,4}表示我们可以匹配 0 到 4 次重复。