Numpy根据国家名称对手机号码进行前缀匹配

df2['手机号码'] = df2['手机号码'].apply(lambda x: re.sub(r'\D+', '', str(x)))

使用正则表达式去除"手机号码"列中的非数字字符,并将结果重新赋值给"手机号码"列。re.sub()函数的第一个参数是要替换的正则表达式模式,\D+表示匹配所有非数字字符;第二个参数是替换的字符串,在这里我们用空字符串""进行替换;第三个参数是要处理的列,通过apply()函数和lambda表达式应用于每个元素。

prefix_map = {
    '巴西': '55',
    '墨西哥': '52',
    '智利': '56',
    '哥伦比亚': '57'
}

df2['手机号码'] = np.where(df2['手机号码'].notnull() & df2['国家'].isin(prefix_map.keys()), 
                          df2['手机号码'].astype(str).apply(lambda x: prefix_map[df2.loc[df2['手机号码']==x, '国家'].iloc[0]] + x if not x.startswith(prefix_map[df2.loc[df2['手机号码']==x, '国家'].iloc[0]]) else x),
                          df2['手机号码'])

定义了一个字典prefix_map,其中包含国家名称和对应的手机号码前缀。然后,使用np.where()函数根据条件进行替换操作。条件为"手机号码"列不为空且"国家"列的值在prefix_map的键中存在。如果满足条件,将使用apply()函数和lambda表达式对每个元素进行处理。

首先,通过df2.loc[df2['手机号码']==x, '国家'].iloc[0]找到与当前手机号码匹配的国家名称。然后,判断当前手机号码是否已经包含了正确的前缀,如果没有,则通过prefix_map字典将正确的前缀添加到手机号码前面。最后,如果不满足条件,即手机号码为空或国家不在prefix_map的键中,则保持手机号码不变。

你可能感兴趣的:(python,numpy)