You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas DataFrame中验证邮箱并按金额筛选有效数据行

在Pandas中筛选有效邮箱并按金额分类的方法

嗨,我来帮你搞定这个问题!要实现你的需求,我们可以分两步走:先高效验证邮箱格式,再结合金额条件筛选数据。

一、验证邮箱格式的最优方法

在Pandas里,向量化的字符串匹配是验证邮箱的最优方案——比用apply遍历每行效率高得多,尤其适合大数据量场景。我们可以用符合邮箱格式标准的正则表达式,配合Pandas的str.fullmatch()方法来判断邮箱是否有效。

常用邮箱验证正则

这里用一个能覆盖绝大多数合法邮箱的正则(兼容常见的用户名、域名格式):

email_pattern = r'^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$'

它会检查:

  • 用户名部分:允许字母、数字、下划线、点、加号、减号
  • 必须包含@分隔符
  • 域名部分:允许字母、数字、减号,且至少有一个.(比如.com、.co.uk这类多级域名)

给DataFrame添加有效邮箱标记列

我们可以直接用str.fullmatch()生成布尔值列,标记每行的邮箱是否有效:

import pandas as pd
import re

# 你的示例数据
data = {
    'email': ['firstname@firstdomain.com', 'secondname@seconddomain.com', 'thirdname@thirddomain.com', 'kjfslkfj', 'fourthname@fourthdomain.com'],
    'euro': [150, 50, 300, 0, 200]
}
df = pd.DataFrame(data)

# 生成有效邮箱掩码
df['valid_email'] = df['email'].str.fullmatch(email_pattern, na=False)
  • str.fullmatch()会检查整个字符串是否完全匹配正则(避免部分匹配的情况,比如kjfslkfj这种完全不符合的会被标记为False)
  • na=False是处理可能存在的空值(NaN),直接标记为无效邮箱

二、按需求筛选两类数据

现在有了valid_email列,我们可以结合金额条件,用布尔索引快速筛选:

1. 有效邮箱且euro≥100的行

df_gt_100 = df[(df['valid_email']) & (df['euro'] >= 100)]

运行后df_gt_100会包含行0、2、4,也就是金额≥100的有效邮箱数据。

2. 有效邮箱且euro<100的行

df_lt_100 = df[(df['valid_email']) & (df['euro'] < 100)]

运行后df_lt_100会包含行1,也就是金额小于100的有效邮箱数据。

额外说明

如果你需要更严格的邮箱验证(比如支持国际域名的特殊字符、带引号的用户名等),可以调整正则表达式,但上面的方案已经能满足绝大多数日常需求啦。

内容的提问来源于stack exchange,提问作者Manuel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:36:48