You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 22:48:02