Pandas处理邮编列报invalid literal for int()错误 如何替换混合值为0
实现方案
针对1500万条的大数据量场景,优先使用pandas向量化操作避免遍历损耗,完整实现代码如下:
import pandas as pd # 若需保留原逻辑的前向填充空值,可先执行下一行 # df['buyer_zip'] = df['buyer_zip'].ffill() # 1. 把空值统一转为空字符串方便后续处理 df['buyer_zip'] = df['buyer_zip'].fillna('') # 2. 移除所有横杠,拼接5+4格式邮编的前后段 df['buyer_zip'] = df['buyer_zip'].str.replace('-', '', regex=False) # 3. 校验是否为纯数字,包含非数字的内容统一替换为0 df['buyer_zip'] = df['buyer_zip'].where(df['buyer_zip'].str.fullmatch(r'\d+', na=False), '0') # 4. 转为整数类型 df['buyer_zip'] = df['buyer_zip'].astype(int)
逻辑说明
regex=False关闭正则匹配,大幅提升横杠替换的执行速度str.fullmatch会校验整段字符串是否全为数字,只要包含字母、特殊符号就会匹配失败,直接替换为0- 所有操作均为向量化执行,1500万条数据可在秒级完成处理
- 如需同步处理
item_zip列,替换列名执行相同逻辑即可
处理后输出和预期完全一致:
buyer_zip 0 97219 1 114153528 2 0 3 907031234
内容的提问来源于stack exchange,提问作者Vasudha Pasumarthi
相关产品推荐
相关产品推荐

