如何提取DataFrame列中'zip_code'后的首个单词(邮编)
从DataFrame的location列提取邮编值
需求
从DataFrame的location列字符串中,识别特定单词zip_code并提取其后方的邮编值。
输入示例
name location Bar1 LA Jefferson zip_code 202378 Avenue free Pizza Avenue 45 zip_code 45623 wichita st Tacos Las Americas avenue 7 zip_code 67890 nicolas st
期望输出
name location Bar1 202378 Pizza 45623 Tacos 67890
现有进展
已实现单个字符串的邮编提取:
str = "address1 355 Turnpike Ste 4 address3 zip_code 02021 country US " str.split("zip_code")[1].split()[0] >> 02021
解决方案
要对DataFrame的location列逐行执行提取操作,有两种常用方法:
方法1:使用apply方法
把单个字符串的提取逻辑封装成函数,再通过apply作用于整个列:
import pandas as pd # 构造示例DataFrame data = { 'name': ['Bar1', 'Pizza', 'Tacos'], 'location': [ 'LA Jefferson zip_code 202378 Avenue free', 'Avenue 45 zip_code 45623 wichita st', 'Las Americas avenue 7 zip_code 67890 nicolas st' ] } df = pd.DataFrame(data) # 定义提取函数 def extract_zip(location_str): return location_str.split("zip_code")[1].split()[0] # 应用到location列,替换原列或生成新列 df['location'] = df['location'].apply(extract_zip) print(df)
方法2:使用正则表达式(更高效,适合大数据量)
利用str.extract配合正则表达式直接匹配邮编,比apply性能更好:
# 使用正则匹配zip_code后的数字序列 df['location'] = df['location'].str.extract(r'zip_code\s+(\d+)', expand=False) print(df)
正则表达式r'zip_code\s+(\d+)'的含义:
zip_code:匹配固定字符串\s+:匹配一个或多个空格(\d+):捕获一个或多个数字(即邮编值)
内容的提问来源于stack exchange,提问作者coding
相关产品推荐
相关产品推荐

