0

我有一个包含 [姓名、电子邮件、地址、信用卡] 列的 CSV 文件。我想在每一列上应用正则表达式并检查该列是否有效。例如,电子邮件列应包含所有电子邮件值。

for i in df['Email']:
    
    lst = re.findall('\S+@\S+', i)   
    if lst!=None:
        count=count+1 
        
        print("Match Numer : ",count,"Match Found :   ",lst)
    else:
        print(i," is not a valid email")

像 'xyz@gmail.com' 这样的有效电子邮件的输出应该是这样的: Match Number: 100['xyz@gmail.com'] 问题在于,像 'notvalidemail' 这样的无效电子邮件的输出是: Match Number: 101[] else 部分永远不会执行!有人可以帮我吗?

4

1 回答 1

0

我不会使用 for 循环来这样做,pandas 已经有非常酷的方法来进行正则表达式比较。使用相同的常规 experesion,您可以执行以下操作:

valid_emails = df.loc[df.Email.str.match('\S+@\S+'), 'Email']
print(valid_emails)

您还可以通过否定match方法的输出来过滤错误的电子邮件

not_valid_emails = df.loc[~(df.Email.str.match('\S+@\S+')), 'Email']
print(not_valid_emails)

甚至可以快速计算有效电子邮件的数量:

df.Email.str.match('\S+@\S+').value_counts()

或者,如果您更喜欢百分比方法:

df.Email.str.match('\S+@\S+').value_counts(normalize=True)
于 2020-06-26T15:59:12.567 回答