Python-从逆中获取特定字符后的字符串

时间:2019-04-02 19:32:19

标签: python python-3.x

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

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

3 个答案:

答案 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='.')
相关问题