如何使用pandas遍历指定列校验邮箱并清空对应单元格值
问题原因和实现方案
你写的循环无法生效的核心原因是:直接遍历df['first']得到的x是单元格值的拷贝,修改x不会同步改动原DataFrame中的数据。另外仅通过是否包含.com识别邮箱的逻辑误差较大,容易误判正常文本,推荐用正则匹配标准邮箱格式。
推荐实现(向量化操作,性能更高)
不需要写循环,直接用pandas自带的字符串匹配方法即可:
import re # 标准邮箱格式匹配正则 email_reg = r'^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$' # 将匹配到邮箱的单元格置为空 df.loc[df['first'].str.match(email_reg, na=False), 'first'] = ''
循环写法(仅作为逻辑参考)
如果一定要用循环实现,需要通过索引定位修改原DataFrame:
import re email_reg = r'^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$' for idx, value in df['first'].items(): if re.match(email_reg, str(value)): df.loc[idx, 'first'] = ''
如果你的业务场景只需要判断包含.com就置空,可以把匹配逻辑简化为df['first'].str.contains('.com', na=False)即可。
内容的提问来源于stack exchange,提问作者Marioko53
相关产品推荐
相关产品推荐

