Pandas DataFrame中为不足5位的邮编补前导零问题求助
解决Pandas邮编补前导零的问题
你的代码未生效的核心原因是float转字符串时保留了小数点后缀(比如4759.0转成字符串后是"4759.0",长度为5,导致len(str(x))<5的判断不成立,跳过了补零逻辑),另外用apply结合lambda的写法不如直接用Pandas原生字符串方法高效可靠。
修正步骤:
1. 正确处理float转字符串(去除小数点后缀)
先把float类型的邮编转为字符串,并去掉末尾的.0(避免干扰长度判断):
df_tellall['zipcode'] = df_tellall['zipcode'].astype(str).str.replace(r'\.0$', '', regex=True)
这一步会把4759.0转为"4759",67509.0转为"67509",同时保留空值或非数字的原字符串。
2. 生成补零后的邮编列
根据你的需求(长度不足5位补前导零至5位,5位邮编设为空),用Pandas原生方法实现:
df_tellall['cleanzip'] = df_tellall['zipcode'].str.zfill(5).where(df_tellall['zipcode'].str.len() < 5, "")
验证结果:
执行后你的DataFrame会变成:
| zipcode | cleanzip |
|---|---|
| 67509 | |
| 4759 | 04759 |
补充说明:
- 如果你实际需求是所有邮编都补至5位(包括原本5位的),只需简化为:
df_tellall['cleanzip'] = df_tellall['zipcode'].str.zfill(5) - Pandas的
str.zfill(n)方法会自动给字符串补前导零至指定长度n,比手动用lambda更高效且不易出错。
内容的提问来源于stack exchange,提问作者pyphan
相关产品推荐
相关产品推荐

