Python处理中间带空格的电话号码时被转为0的问题如何解决?
问题原因
- 你的正则替换逻辑存在错误:
r'[^\w\s]=+'仅能匹配末尾带=的字符,完全没有处理手机号中间的空格,处理后的值仍然是带空格的字符串 pd.to_numeric无法解析带空格的字符串,会触发errors="coerce"规则返回NaN,后续fillna(0)就直接把这些值替换成了0- 末尾多余的
to_frame()会把单列Series转成DataFrame,赋值给df['Phone_Number']这个Series字段时也可能引发格式异常
修复方案
如果不需要保留手机号开头的0,可以使用以下代码:
import pandas as pd # 先删除所有非数字字符,覆盖空格、横杠等常见手机号分隔符 df['Phone_Number'] = df['Phone_Number'].str.replace(r'\D', '', regex=True) df['Phone_Number'] = pd.to_numeric(df['Phone_Number'], errors="coerce").fillna(0).astype('int64')
如果需要保留手机号开头的0,建议直接存储为字符串格式,不需要转数值:
import pandas as pd # 仅删除不需要的特殊字符,保留数字后直接存为字符串即可 df['Phone_Number'] = df['Phone_Number'].str.replace(r'\D', '', regex=True).fillna('')
内容的提问来源于stack exchange,提问作者Mizanur Choudhury
相关产品推荐
相关产品推荐

