使用Pandas Apply处理County列值:移除冗余后缀遇阻求助
解决Pandas apply()处理County Name列的后缀问题
嘿,我瞅出来你的函数只搞定了一半情况——能去掉普通的" County"后缀,但拿" County/city"这种复合后缀没办法对吧?咱们来调整下代码,让它能覆盖所有场景:
方案1:补全优化自定义函数
先把你没写完的函数完善好,针对性处理两种后缀:
def modify_county(countyname): # 先处理带/city的特殊后缀,再处理常规County后缀 if " County/city" in countyname: return countyname.replace(" County/city", "") elif " County" in countyname: return countyname.replace(" County", "") else: return countyname # 兜底返回原内容,避免无后缀的行出错 # 应用到你的DataFrame列上 df['County Name'] = df['County Name'].apply(modify_county)
跑这段代码后,你的三个示例值会变成:Riverside、San Diego、SanFrancisco,完全符合预期。
方案2:用正则表达式更高效(推荐)
如果以后可能遇到其他类似的后缀变体,用正则会更灵活,一次性搞定所有匹配:
# 直接用Pandas的str.replace,连apply都不用写 df['County Name'] = df['County Name'].str.replace(r" County(/city)?", "", regex=True)
这个正则的意思是:匹配" County",后面可选跟着"/city"的内容,然后把匹配到的部分替换为空。就算以后出现XX County/town这类格式,只要微调正则就能处理,扩展性更强。
为啥你的原函数没生效?
估计是你只判断了"/city"的存在,但没匹配完整的" County/city"后缀——比如可能只写了replace("/city", ""),这样处理SanFrancisco那行后会变成SanFrancisco County,而不是去掉整个后缀。所以必须精准匹配要移除的完整字符串才行。
内容的提问来源于stack exchange,提问作者Glenn G.
相关产品推荐
相关产品推荐

