从数据框中的多个电子邮件地址中提取域名

时间:2019-06-20 00:04:57

标签: python-3.x pandas split

我正在尝试从以下数据框中提取多个域名:

    email
0   test1@gmail1.com; test1@gmail2.com
1   test3@gmail3.com; test4@gmail4.com
2   test5@gmail5.com

我可以使用以下代码拆分并提取第一个电子邮件地址:

orig = []
mylist = []
for i in df['email']:
    orig.append(i)
    i = i[ i.find("@") : ]
    i = i.split(";")
    i = ';'.join(i)
    mylist.append(i)

将列表附加到数据框后,我得到以下结果:

    origemail                           newemail
0   test1@gmail1.com; test1@gmail2.com  @gmail1.com; test1@gmail2.com
1   test3@gmail3.com; test4@gmail4.com  @gmail3.com; test4@gmail4.com
2   test5@gmail5.com  @gmail5.com

我追求的结果: (这些电子邮件地址可能不限于两个,也可能会更多。)

    origemail                           newemail
0   test1@gmail1.com; test1@gmail2.com  @gmail1.com; @gmail2.com
1   test3@gmail3.com; test4@gmail4.com  @gmail3.com; @gmail4.com
2   test5@gmail5.com                    @gmail5.com

有人可以指出正确的方向以实现所需的输出吗?预先感谢。

2 个答案:

答案 0 :(得分:2)

类似的事情应该起作用:

orig = []
mylist = []
for i in df['email']:
    orig.append(i)
    emails = i.strip().split(';')
    domains = [x[x.find('@'):] for x in emails]
    if len(domains) == 1:
        domain_string = domains
    else:
        domain_string = '; '.join(domains)
    mylist.append(domain_string)

它(1)遍历所有电子邮件,(2)首先将它们附加到orig,(3)找到域,然后(4)连接它们并将它们附加到mylist。 / p>

答案 1 :(得分:0)

您的代码的for循环需要像这样重构:

  1. 将当前项目添加到原始列表中
  2. 用分号“;”分隔所有电子邮件
  3. 为每封电子邮件修剪空白
  4. 找到“ @”符号并提取域的子字符串
  5. 使用“;”加入所有域
  6. 将结果添加到我的列表中

希望此伪代码可以提供帮助。