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的键中,则保持手机号码不变。