正则表达式 lambda 不会遍历 df - 打印第一行的结果


def split_it(email):
return re.findall(r"[^@]+@[^@]+(?:.com|.se|.br|.org)", s)
df['email_list'] = df['email'].apply(lambda x: split_it(x))

这段代码似乎适用于df的第一行,但随后会将第一行的结果打印到所有其他行。

它不是遍历所有行吗?还是将第1行的结果打印到所有行?

这里不需要使用apply,直接使用Series.str.findall

df['email_list'] = df['email'].str.findall(r"[^@]+@[^@]+(?:.com|.se|.br|.org)")

如果每行有几封电子邮件,您可以加入结果:

df['email_list'] = df['email'].str.findall(r"[^@]+@[^@]+(?:.com|.se|.br|.org)").str.join(", ")

注意,电子邮件模式可以通过多种方式进行增强,但我会将s添加到否定字符类中以排除空白匹配,并将.移动到组外以避免重复:

r"[^s@]+@[^s@]+.(?:com|se|br|org)"

最新更新