如何使用 python 的 phonenumbers 包处理无效的 phone 号码并申请?

How can I handle invalid phone numbers using python's phonenumbers package and apply?

我有一个包含各种 phone 数字的数据框,我想为其提取时区。我申请循环数据框中的系列如下

external_calls_cleaned_df['time_zone'] = external_calls_cleaned_df.apply(lambda x: timezone.time_zones_for_number(phonenumbers.parse(str(x.external_number), None)), axis=1)

只要 x.external_number 中的 phone 数字不包含单个无效的 phone 数字,这就可以正常工作;但是,如果在整个系列中发现一个无效的 phone 号码,则失败。

我希望它做的是 return 'Null' 或 None 每当它得到一个无效数字时——实际上是任何东西——我可以在事后过滤掉那些,但是我不希望进程在那个时候停止。

我尝试将时区函数包装在一个新函数中,然后用 try

执行它
def get_timezone(df):
    try:
        x = timezone.time_zones_for_number(phonenumbers.parse(str(df.external_number), None))
    except:
       None
    return x

然后使用

external_calls_cleaned_df['time_zone'] = external_calls_cleaned_df.apply(lambda x:get_timezone(x), axis=1)

该过程随后完成,但它会为每个值用 None 填充 'time_zone' 字段。

为了实现这一点,我使用了 phonenumbers 包,它是来自 google.

的 libphonenumber java 包的一个端口

由于显而易见的原因,我无法在我的数据库中共享 phone 数字,所以我不知道如何将其变成可重现的示例,或者我会提供它。

谁能帮帮我?

谢谢, 布拉德

尝试重构您的代码,以便将 map with the target column "external_number" instead of apply 用于整个数据框,如下所示:

def get_timezone(x):
    try:
        return timezone.time_zones_for_number(phonenumbers.parse(str(x), None))
    except:
        return None


external_calls_cleaned_df["time_zone"] = external_calls_cleaned_df[
    "external_number"
].map(get_timezone)