使用Python phonenumbers库批量验证DataFrame手机号并查询运营商
错误原因
报错的核心原因是DataFrame内的手机号列数据类型为整数,而phonenumbers.parse()仅支持字符串类型的号码输入,调用len()校验时触发了类型错误。
实现方案
推荐使用pandas的apply()方法批量处理整列数据,效率远高于手动for循环,同时增加异常捕获逻辑避免无效号码导致程序中断,完整代码如下:
import phonenumbers from phonenumbers import carrier # 1. 将手机号列转换为字符串格式 df['phone_number'] = df['phone_number'].astype(str) # 2. 定义获取运营商的工具函数,适配不同地区号码 def get_carrier_info(phone_str, region_code="IN"): try: # 解析手机号,若号码自带国际前缀(如+91),可将region_code设为None parsed_num = phonenumbers.parse(phone_str, region=region_code) # 先校验号码本身是否合法 if phonenumbers.is_valid_number(parsed_num): return carrier.name_for_number(parsed_num, "en") return None except: # 解析失败直接返回空值,标记为无效号码 return None # 3. 批量处理整列,新增运营商字段 df['carrier'] = df['phone_number'].apply(get_carrier_info) # 4. 过滤无效号码:剔除运营商字段为空的记录 valid_phone_df = df[df['carrier'].notnull()].reset_index(drop=True)
补充说明
- 如果你处理的是其他国家/地区的手机号,修改
region_code为对应国家二位缩写即可,比如中国大陆手机号填CN - 该方案可自动过滤
9999999999、0123456789这类不存在对应运营商的测试号码,也能过滤格式不合法的无效号码
内容的提问来源于stack exchange,提问作者Sid
相关产品推荐
相关产品推荐

