Python中使用email-validator处理DataFrame触发RecursionError问题求助
问题原因与解决方案
错误根源
你自定义的函数名字和从email_validator库导入的validate_email完全重名了!函数内部调用validate_email(em)时,Python会优先调用你自己写的这个函数,而非库的官方验证函数,直接导致无限递归,最终触发RecursionError。
修复步骤
- 重命名自定义函数:把你的验证函数改成不冲突的名字,比如
check_email_validity - 让函数返回结果:原函数只打印结果,
apply后新列会全是NaN,必须让函数返回"Valid"或"Invalid"来填充DataFrame的新列
修正后的完整代码
import pandas as pd import email_validator from email_validator import validate_email, EmailNotValidError # 自定义验证函数,改名避免和库函数冲突 def check_email_validity(em): try: # 这里调用的是email_validator库的官方validate_email email_object = validate_email(em) return "Valid" except EmailNotValidError: return "Invalid" # 应用到DataFrame的Email列 df["Validation"] = df["Email"].apply(check_email_validity)
更优实现建议
如果处理的邮箱数据量较大,apply的效率偏低,可以用以下两种方式提速:
- 向量化处理:用
pandas.vectorize包装函数,实现批量验证
vectorized_check = pd.vectorize(check_email_validity) df["Validation"] = vectorized_check(df["Email"])
- 列表推导式:直接遍历列生成结果列表,速度优于
apply
df["Validation"] = [check_email_validity(email) for email in df["Email"]]
内容的提问来源于stack exchange,提问作者runningtrumpet
相关产品推荐
相关产品推荐

