我正在尝试捕获这些电子邮件列表的域。我在电子邮件中有子域,并试图将其删除。我只需要在'之前和之后输入一个字符串。从后退
ids = [1,2,3,4,5,6,7,8]
emails = ['gmail.com','aol.com','','123.abc.edu','123.er.abc.edu','','abc.gov','test.net']
df = pd.DataFrame({'ids':ids,'emails':emails})
df
ids emails
0 1 gmail.com
1 2 aol.com
2 3
3 4 123.abc.edu
4 5 123.er.abc.edu
5 6
6 7 abc.gov
7 8 test.net
对此进行了尝试,并结合了-1、2:...等
df.emails.str.split(".", 1).str[-1]
0 com
1 com
2
3 abc.edu
4 er.abc.edu
5
6 gov
7 net
需要这样的输出
ids emails
0 1 gmail.com
1 2 aol.com
2 3
3 4 abc.edu
4 5 abc.edu
5 6
6 7 abc.gov
7 8 test.net
答案 0 :(得分:2)
通过将1
作为split()
的第二个参数,可以将拆分限制为一个。
改为使用:
df.emails.str.split(".").str[-2:]
获取拆分字符串的最后两段:
0 [gmail, com]
1 [aol, com]
2 []
3 [abc, edu]
4 [abc, edu]
5 []
6 [abc, gov]
7 [test, net]
要获得包含点的字符串形式的输出,请链接一个方法以连接上一个输出:
In []: df.emails.str.split(".").str[-2:].str.join(".")
Out[]:
0 gmail.com
1 aol.com
2
3 abc.edu
4 abc.edu
5
6 abc.gov
7 test.net
Name: emails, dtype: object
答案 1 :(得分:1)
您可以预处理电子邮件列表
emails = ['gmail.com','aol.com','','123.abc.edu','123.er.abc.edu','','abc.gov','test.net']
emails_filtered = []
for email in emails:
if '.' in email:
emails_filtered.append( '.'.join( [ email.split('.')[:-2] ] ) )
else:
emails_filtered.append('')
df = pd.DataFrame({'ids':ids,'emails':emails_filtered})
希望有帮助。
答案 2 :(得分:0)
尝试一下
df.emails.str.split(".").str[-2:].str.join(sep='.')