如何用Pandas实现大小写不敏感的加拿大省份全称到缩写映射
方案合理性评估
你当前的实现功能上是完全可用的,但性能存在可优化空间:
- 每处理一行数据都要遍历整个加拿大省份字典的所有键,数据量达到十万、百万级时,时间开销会线性上涨
- 每次匹配都重复将字典键转小写,属于冗余计算,可以提前预处理避免
更高效的实现方式
提前预处理出统一小写键的映射字典,搭配pandas向量化操作替代逐行apply,性能提升非常明显,数据量越大优势越突出:
import pandas as pd # 原省份映射字典 ca_provinces_dic = { 'Newfoundland and Labrador': 'NL', 'Prince Edward Island': 'PE', 'Nova Scotia': 'NS', 'New Brunswick': 'NB', 'Quebec': 'QC', 'Ontario': 'ON', 'Manitoba': 'MB', 'Saskatchewan': 'SK', 'Alberta': 'AB', 'British Columbia': 'BC', 'Yukon': 'YT', 'Northwest Territories': 'NT', 'Nunavut': 'NU', } # 仅预处理一次:生成小写键的映射字典 lower_ca_map = {k.strip().lower(): v for k, v in ca_provinces_dic.items()} # 向量化处理:先统一列值格式,再用O(1)的字典查询匹配,未匹配的保留原值 df['province'] = df['province'].str.strip().str.lower().map(lower_ca_map).fillna(df['province'])
如果列中存在空值或非字符串类型的值,可以加一步类型转换避免报错:
df['province'] = df['province'].astype(str).str.strip().str.lower().map(lower_ca_map).fillna(df['province'])
内容的提问来源于stack exchange,提问作者ahmedshahriar
相关产品推荐
相关产品推荐

