Python 如何验证手机号码
我有过这样的经历Python 如何验证手机号码,python,pandas,Python,Pandas,我有过这样的经历 Contact Number 0 1 NaN 2 6363887122.0 3 6363887122.0 我想要这个 Contact Number Status_contactNUmber Invalid_contactNUmber 0 Blank/Null True 1 NaN Blank/Null Tru
Contact Number
0
1 NaN
2 6363887122.0
3 6363887122.0
我想要这个
Contact Number Status_contactNUmber Invalid_contactNUmber
0 Blank/Null True
1 NaN Blank/Null True
2 6363887122 Valid False
3 6363887122 Valid False
我试着用这个
def contactNumber(ele):
if (pd.isna(ele) or (ele=='')):
return ("Blank/Null",True)
elif re.search(r'^([0]|\+91)?[6789]\d{9}$',ele):
# elif ele.str.contains(r'^([0]|\+91)?[6789]\d{9}$'):
return ("Valid",False)
else:
return ("invalid",True)
df[['Status_contactNUmber','Invalid_contactNUmber']] = df['Contact Number'].apply(contactNumber).tolist()
但是给出错误,因为
Float
type中的联系人号码列请将您的列类型字符串从Float更改为首先,您在df索引顶部看到的0
实际上是索引的名称,而不是第一行。df
中的第一行从index=1
(值NaN开始)。您还可以通过这样一个事实来理解它,即如果联系人号码列的类型为浮动,那么它怎么会有“
值?(它将有NaN,就像它在index=1
上一样)
我通过复制您的df并检查其索引(请参见名称'0'和从1开始的索引)确认了这一点:
所以现在来看看你想要什么,你可以通过在你的函数中处理它来做到这一点。只需先将ele
转换为int类型即可从电话号码中删除.0
,然后转换为str类型以进行正则表达式匹配:
def contactNumber(ele):
if (pd.isna(ele)):
return ("Blank/Null",True)
elif re.search(r'^([0]|\+91)?[6789]\d{9}$', str(int(ele))):
# elif ele.str.contains(r'^([0]|\+91)?[6789]\d{9}$'):
return ("Valid",False)
else:
return ("invalid",True)
您不需要(ele='')
条件,因为如上所述,float
类型列将不会有空字符串
输出:
>>> df[['Status_contactNUmber','Invalid_contactNUmber']] = df['Contact Number'].apply(contactNumber).tolist()
>>> df
Contact Number Status_contactNUmber Invalid_contactNUmber
0
1 NaN Blank/Null True
2 6363887122 Valid False
3 6363887122 Valid False
使用df[“联系人号码”].astype(int)
将这些值作为整数获取。对于null/blank not WORK,之前已对SO进行了回答。我建议您使用fillna()
方法将NAN替换为无效值。或者,您可以使用pandas的Int64,它确实允许NAN,如post linkedThen中所述,但随后将转到无效的bcz regex not match
>>> df[['Status_contactNUmber','Invalid_contactNUmber']] = df['Contact Number'].apply(contactNumber).tolist()
>>> df
Contact Number Status_contactNUmber Invalid_contactNUmber
0
1 NaN Blank/Null True
2 6363887122 Valid False
3 6363887122 Valid False