Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何验证手机号码_Python_Pandas - Fatal编程技术网

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