如何在Python中按Emailtype为W的条件验证邮箱
问题:仅验证Emailtype为W的邮箱格式
数据示例
Person Id - EmailID- Email - Emailtype- -18583-5435-natasha@gmail.com-P- -13533-23145-john@georgeschool.com-W- -35424-5784-smithedwardshotmail.com-P- -35424-5785-smith.edwards@hardvardsuni.com-W- -47815-8794-jill.townsendJohnsUniverty.com-W-
需求
对Email字段进行邮箱格式验证,但仅针对Emailtype为W(工作邮箱)的记录,非W类型的记录不做验证,保留原Email值。
现有代码及问题
当前代码能对所有Email做验证,但无法实现仅验证W类型的逻辑,尝试添加条件时出现语法错误:
import re import pandas as pd data = pd.read_csv("data.csv", sep = ';', error_bad_lines=False ) #Read file value = data.iat[1,1] # load 1st value from table data['EMail'] = data['EMail'].where(data['']data['EMail'].str.contains(r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b') , 'Email field is invalid') #check if any of the emails fields are invalid # 尝试添加条件但报错的代码 #data['EZMail'] = data['EMail'].where(data['']data['EMail'].str.contains(r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b') && data['']data['Emailtype'].str.contains('W') , 'Email field is invalid') data.to_csv(f'{value}DATA.csv', sep= ';', date_format='%Y%m%d', index=False) #write data to file
预期输出
- Person Id - EmailID- Email - Emailtype- -18583-5435-natasha@gmail.com-P- -13533-23145-john@georgeschool.com-W- -35424-5784-smithedwardshotmail.com-P- -35424-5785-smith.edwards@hardvardsuni.com-W- -47815-8794-E-Mail field is invalid-W-
解决方案
错误原因
之前的尝试存在两个语法问题:
- 多余的
data['']写法,属于无效语法 - Python中逻辑与运算符是
&而非&&
修正后的完整代码
import re import pandas as pd # 读取数据,注意确认分隔符与实际文件匹配,示例数据用'-',可根据实际调整sep参数 data = pd.read_csv("data.csv", sep=';', error_bad_lines=False) value = data.iat[1, 1] # 定义邮箱格式验证正则表达式 email_regex = r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b' # 构建条件:要么是非工作邮箱(不验证),要么是工作邮箱且格式符合 validation_condition = (data['Emailtype'] != 'W') | data['Email'].str.contains(email_regex, na=False) # 应用条件:符合条件保留原Email,不符合则替换为提示文本 data['Email'] = data['Email'].where(validation_condition, 'E-Mail field is invalid') # 保存处理后的数据 data.to_csv(f'{value}DATA.csv', sep=';', date_format='%Y%m%d', index=False)
关键说明
- 条件逻辑:使用
|(逻辑或)实现“非W类型直接保留,W类型需符合格式才保留”的需求 - 空值处理:
na=False确保遇到空值时不会抛出异常,统一按不符合处理 - 正则适配:保留原有的邮箱验证规则,确保格式判断准确
- 输出匹配:替换文本与预期输出一致,保证结果符合要求
内容的提问来源于stack exchange,提问作者Tito
相关产品推荐
相关产品推荐

