如何用Pandas筛选以@gmail.com结尾的邮件列?
代码错误分析及修正
你的代码主要有两个关键问题:
- 行切片而非字符串切片:
excelRead['mails'][:-11]是把整个邮件列的最后11条记录砍掉,不是对每个邮箱字符串截取末尾部分。这就导致你生成的布尔Series长度和原DataFrame不一致,触发了索引对齐错误。 - 手动切片既算错长度又不可靠:就算你想截取字符串,
@gmail.com实际是10个字符,应该用excelRead['mails'].str[-10:],但这种硬编码长度的方式本身就不合理——万一遇到@googlemail.com这类不同长度的后缀直接失效,完全没必要这么做。
正确写法
直接用pandas自带的字符串方法str.endswith(),简单又靠谱:
import pandas as pd # 读取Excel并清理空值 excel_read = pd.read_excel('mailing.xlsx') excel_read.dropna(inplace=True) # 筛选所有@gmail.com结尾的记录 gmail_records = excel_read[excel_read['mails'].str.endswith('@gmail.com')] print(gmail_records)
额外提示
- 变量名尽量用
小写+下划线的格式(比如excel_read),符合Python编码规范,可读性更强。 str.endswith()会自动遍历每个邮箱字符串,返回和原列长度一致的布尔值,完美适配DataFrame的布尔索引筛选逻辑。
内容的提问来源于stack exchange,提问作者Elfo
相关产品推荐
相关产品推荐

