我想做一个简单的电子邮件验证列表导入电子邮件地址到一个数据库。我只想确保@符号之前有内容,@符号后面有内容,'.‘之后有2+字符。下面是一个示例df:
import pandas as pd
import re
errors= {}
data= {'First Name': ['Sally', 'Bob', 'Sue', 'Tom', 'Will'],
'Last Name': ['William', '', 'Wright', 'Smith','Thomas'],
'Email Address': ['sally@gmail.co.uk','bobby123@gmail.com','suewright_123@yahoo.gov','tom.smith23@students.wacs.fl.us','']}
df=pd.DataFrame(data)
这是我用来检查有效电子邮件的表达式:
regex = re.compile(r'([A-Za-z0-9]+[.-_])*[A-Za-z0-9]+@[A-Za-z0-9-]+(\.[A-Z|a-z]{2,})+')
def isValid(email):
if re.fullmatch(regex, email):
pass
else:
return("Invalid email")
这个regex运行良好,但我不知道如何轻松地遍历我的整个df电子邮件地址列。我试过:
for col in df['Email Address'].columns:
for i in df['Email Address'].index:
if df.loc[i,col] = 'Invalid email'
errors={'row':i, 'column':col, 'message': 'this is not a valid email address'
我想把这封无效的电子邮件写到一本名为“错误”的字典里。通过上面的代码,我得到了一个无效的错误。
发布于 2022-08-23 11:32:28
根据你的描述,我可能会
df["Email Address"].str.match(r"^.+@.+\..{2,}$")
如果正则表达式与字符串匹配,str.match
将返回True
。
判断力
^
的开始.+
之前的内容@
.+
之后的内容\.
.{2,}
发布于 2022-08-23 11:30:59
Pandas数据格式的美妙之处在于,你几乎从来不需要循环它们--避免循环会显著提高你的速度。
df['Email Address'].str.contains(regex)
将返回电子邮件地址列中是否每个观察的布尔序列。
有关更多信息,请查看向量化字符串操作的本章。
发布于 2022-08-23 11:29:34
您可以在dataframe上使用.iterrows()迭代行。行包含一系列内容,您可以像字典一样访问列。
for i, row in df.iterrows():
if not isValid(row['Email Address']):
print("Invalid email")
https://stackoverflow.com/questions/73464069
复制