Python字符串通配符搜索及更新:统一城市列格式需求
嘿,这个城市名称标准化的需求太常见啦!用Python配合pandas就能轻松搞定,我给你两种实用的实现方式,你可以根据自己的场景来选:
方法1:用pandas的replace + 正则匹配(简洁高效)
这种方式最适合批量处理,一行代码就能搞定所有规则。我们利用正则的.*匹配任意前缀或后缀,直接替换成标准城市名:
import pandas as pd # 模拟你的数据 data = {'City': ['Sydney', 'Sydney-EZ', 'Bangalore', 'Bengalore SEZ', 'Delhi', 'New Delhi']} df = pd.DataFrame(data) # 定义替换规则:键是正则匹配模式,值是标准化后的名称 replace_rules = { r'.*Sydney.*': 'Sydney', r'.*Bangalore.*': 'Bangalore', r'.*Delhi.*': 'Delhi' } # 执行替换,记得打开regex模式 df['City'] = df['City'].replace(replace_rules, regex=True) # 查看结果 print(df)
运行后所有包含目标关键词的城市名都会被替换成标准格式,不管是带后缀的Sydney-EZ还是带前缀的New Delhi,都能完美匹配。
方法2:自定义函数 + apply(灵活易扩展)
如果之后需要添加更多城市规则,或者需要更复杂的判断逻辑,这种方式可读性更强,维护起来也更方便:
import pandas as pd data = {'City': ['Sydney', 'Sydney-EZ', 'Bangalore', 'Bengalore SEZ', 'Delhi', 'New Delhi']} df = pd.DataFrame(data) def standardize_city(city_name): # 检查是否包含目标关键词,匹配到就返回标准名 if 'Sydney' in city_name: return 'Sydney' elif 'Bangalore' in city_name: return 'Bangalore' elif 'Delhi' in city_name: return 'Delhi' else: # 没有匹配到的情况,可以返回原名称或自定义默认值 return city_name # 应用函数到City列 df['City'] = df['City'].apply(standardize_city) print(df)
小提示
如果你的数据里有大小写不一致的情况(比如sydney或DELHI),可以把判断改成大小写不敏感的形式:
# 比如把判断改成 if 'sydney' in city_name.lower(): return 'Sydney'
这样不管原字符串是大写、小写还是混合,都能准确匹配啦!
内容的提问来源于stack exchange,提问作者Mighty
相关产品推荐
相关产品推荐

