如何在DataFrame中清理联系电话:移除特殊字符与国际前缀
Pandas 手机号清洗:移除特殊字符与国际前缀保留纯数字
需求说明
需要对包含联系电话的DataFrame的Phone列进行清洗:移除括号、连字符等特殊字符,同时去除国际前缀(如+1),最终保留10位纯数字格式。
原始数据
Id Phone 1 (+1)123-456-7890 2 (123)-(456)-(7890) 3 123-456-7890
期望输出
Id Phone 1 1234567890 2 1234567890 3 1234567890
解决方案
使用Pandas结合正则表达式完成清洗,步骤如下:
- 导入Pandas并创建原始DataFrame:
import pandas as pd data = { 'Id': [1, 2, 3], 'Phone': ['(+1)123-456-7890', '(123)-(456)-(7890)', '123-456-7890'] } df = pd.DataFrame(data)
- 清洗
Phone列:
# 移除所有非数字字符 df['Phone'] = df['Phone'].str.replace(r'\D', '', regex=True) # 处理国际前缀:若为11位且以1开头,保留后10位 df['Phone'] = df['Phone'].apply(lambda x: x[-10:] if len(x) == 11 and x.startswith('1') else x)
- 查看结果:
print(df)
代码解释
str.replace(r'\D', '', regex=True):利用正则\D匹配所有非数字字符,将其替换为空,得到纯数字字符串。apply函数判断:针对带国际前缀的11位号码(如11234567890),截取最后10位;对于本身就是10位的号码,直接保留,确保结果统一为10位纯数字。
内容的提问来源于stack exchange,提问作者parth hirpara
相关产品推荐
相关产品推荐

