首页 > 解决方案 > Python - 从逆向获取特定字符后的字符串

问题描述

我正在尝试捕获这些电子邮件列表的域。我在电子邮件中有子域并试图将其删除。我只需要在 '.' 之前和之后的字符串。从后面

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

标签: pythonpython-3.x

解决方案


通过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

推荐阅读