如何通过前缀匹配从FullPostcodes更新PostcodeSector列数据
匹配英国邮政编码区段到完整邮政编码的解决方案
以下针对不同常用工具提供实现方案,满足将邮政编码区段替换为对应匹配的完整邮政编码需求:
Excel 解决方案
如果使用Excel 365或2021,可直接用XLOOKUP函数实现前缀匹配并返回首个完整邮编:
- 假设你的区段数据在Sheet1的A列(A2开始为数据行),完整邮编数据在Sheet2的B列
- 在Sheet1的B2单元格输入公式:
=XLOOKUP(A2&"*", Sheet2!$B:$B, Sheet2!$B:$B, "无匹配", 2) - 下拉填充公式后,将B列结果复制粘贴回A列替换原区段数据
若使用旧版Excel,改用INDEX+MATCH组合:
=INDEX(Sheet2!$B:$B, MATCH(A2&"*", Sheet2!$B:$B, 0))
注:
MATCH函数中的0参数会返回首个前缀匹配的结果,若需处理无匹配的情况,可嵌套IFERROR:=IFERROR(INDEX(...), "无匹配")
Python Pandas 解决方案
通过数据帧处理实现批量匹配:
- 导入并读取两个数据集:
import pandas as pd # 读取区段数据 sector_df = pd.read_excel("你的区段文件.xlsx") # 读取完整邮编数据 full_df = pd.read_excel("FullPostcodes.xlsx") - 生成区段到完整邮编的映射表(保留每个区段的首个匹配):
# 从完整邮编中提取区段前缀 full_df["sector_prefix"] = full_df["Postcode"].str.extract(r"^(\w+\s\d)") # 去重,保留每个区段的第一条完整邮编 sector_map = full_df.drop_duplicates(subset="sector_prefix", keep="first").set_index("sector_prefix")["Postcode"] - 替换原区段列:
sector_df["PostcodeSector"] = sector_df["PostcodeSector"].map(sector_map) # 保存结果 sector_df.to_excel("更新后的区段数据.xlsx", index=False)
SQL 解决方案
假设你使用的是SQL Server,若为其他数据库(如MySQL、PostgreSQL)只需调整TOP 1为对应语法(如LIMIT 1):
-- 更新区段表的PostcodeSector列为匹配的首个完整邮编 UPDATE SectorTable SET PostcodeSector = ( SELECT TOP 1 Postcode FROM FullPostcodes WHERE Postcode LIKE SectorTable.PostcodeSector + '%' ) -- 仅更新存在匹配的行 WHERE EXISTS ( SELECT 1 FROM FullPostcodes WHERE Postcode LIKE SectorTable.PostcodeSector + '%' );
内容的提问来源于stack exchange,提问作者JeffWithpetersen
相关产品推荐
相关产品推荐

