用python读取包含手机号的Excel表格文件时,由于有的手机号录入时不规范,数值中间有的存在空格,有的不存在空格,如下所示。
为保证后续匹配工作顺利进行,对手机号进行格式转换,统一转换为浮点型。
df["手机号码"].astype(np.float)
不过执行该语句时报错,报错信息如下:
ValueError: could not convert string to float: ‘130 1111 1112’
由于手机号中间存在空格,系统将其默认为字符型,无法强制转换为浮点型。只有将中间的空格去除,才可以顺利转换为浮点型。
提到去除空格,我们比较熟悉的strip()、lstrip()、rstrip()
函数在此处都不适用,因为strip()
用于去除首尾的空格,lstrip()
用于去除起始位置的空格,rstrip()
用于去除末尾的空格,均不能去除字符串中间的空格。
法一:使用join()方法+split()方法
来去除字符串中间的空格。
join可以将list每个字符通过前字符串进行拼接,split可以将字符串按指定规则进行切割生成一个新的list,不传参默认按空格切割
def fun_str(x):
return(''.join(x.split()))
df["手机号码"]=df["手机号码"].astype(str).apply(lambda x:fun_str(x))
df["手机号码"]=df["手机号码"].astype(np.float)
法二:使用正则表达式
去除字符串中间的空格
strinfo = re.compile(' ')
df["手机号码"]=df["手机号码"].astype(str).apply(lambda x:strinfo.sub("",x))
df["手机号码"]=df["手机号码"].astype(np.float)