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)"