如何使用 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)
我有一个包含各种 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)