如何筛选有效地址数据?移除纯字符及仅含邮编的观测值
地址有效数字筛选方案
需求说明
筛选保留含有效数字地址的观测值,按以下两步执行过滤:
- 第一步:移除仅包含5位邮编的记录
- 第二步:移除地址中无剩余数字的纯字符记录
示例数据
import pandas as pd # 中文示例DataFrame d = { '地址列': ['圣迭戈县,加利福尼亚州', '4150尤特大道,圣迭戈,加利福尼亚州', '维斯塔德尔拉戈,佩里斯,加利福尼亚州,92570'], '省份列': ['prov_1', 'prov_2', 'prov_3'] } df = pd.DataFrame(data=d)
原始DataFrame内容:
地址列 省份列 0 圣迭戈县,加利福尼亚州 prov_1 1 4150尤特大道,圣迭戈,加利福尼亚州 prov_2 2 维斯塔德尔拉戈,佩里斯,加利福尼亚州,92570 prov_3
实现代码
# 第一步:移除仅含邮编的记录 # 匹配结尾为5位邮编且无其他数字的条目,取反保留有效记录 df = df[~(df['地址列'].str.contains(r'\b\d{5}\b$', regex=True) & ~df['地址列'].str.contains(r'\d{1,4}\b', regex=True))] # 第二步:移除纯字符地址 # 先移除地址中的5位邮编,再检查剩余内容是否包含数字 df['临时地址'] = df['地址列'].str.replace(r'\b\d{5}\b', '', regex=True) df = df[df['临时地址'].str.contains(r'\d', regex=True)] # 删除临时列 df = df.drop('临时地址', axis=1) print(df)
输出结果
地址列 省份列 1 4150尤特大道,圣迭戈,加利福尼亚州 prov_2
逻辑说明
- 移除仅含邮编的记录:用正则
\b\d{5}\b$定位结尾的5位邮编,同时校验地址中是否存在1-4位的其他数字,仅保留有非邮编数字的记录。 - 移除纯字符地址:先剥离地址中的5位邮编,再检查剩余内容是否包含数字,过滤掉无数字的纯字符地址。
内容的提问来源于stack exchange,提问作者James
相关产品推荐
相关产品推荐

