将pandas电子邮件“发件人”字段的数据框拆分为发件人的名称、电子邮件地址

2024-09-27 19:30:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个pandasDataframe包含一个列,它是从电子邮件的中提取的

                                                   From
0          Grey Caulfu <grey.caulfu@ymail.com>
1                   Deren Torculas <deren.e.torcs87@gmail.com>
2            Charlto Youna <youna.charlto4@yahoo.com>

我想利用str访问器将数据拆分为两列,这样第一列是,Name,包含实际名称(first Name last Name),第二列Email包含电子邮件地址)。在

如果我使用:

^{pr2}$

这几乎是我需要的,但它将姓氏放在Email列中(也就是说,它将split()中的最后两项放入此列)。如何修改它,使split()在填充第一列时知道在第一个空格之后停止?在

一旦我们实现了这一点,我们就需要使它更加健壮,以便它能够处理包含三个元素的名称,例如

Billy R. Valentine <brvalentine@abc2mail.com>
Yurimov | Globosales <yurimov@globosaleseu.com>

Tags: namefrom名称com电子邮件emailgreysplit
2条回答

您可以传递expand=True并从str创建新列,而不必创建新的df:

In [353]:
df[['Name','e-mail']] = df['From'].str.rsplit(' ',1, expand=True)
df

Out[353]:
                                         From            Name  \
0         Grey Caulfu <grey.caulfu@ymail.com>     Grey Caulfu   
1  Deren Torculas <deren.e.torcs87@gmail.com>  Deren Torculas   
2    Charlto Youna <youna.charlto4@yahoo.com>   Charlto Youna   

                        e-mail  
0      <grey.caulfu@ymail.com>  
1  <deren.e.torcs87@gmail.com>  
2   <youna.charlto4@yahoo.com>  

你可以用^{}代替^{},从反面分开。示例-

In [12]: df1 = pd.DataFrame(df.From.str.rsplit(' ',1).tolist(), columns=['Name','Email'])

In [13]: df1
Out[13]:
             Name                        Email
0     Grey Caulfu      <grey.caulfu@ymail.com>
1  Deren Torculas  <deren.e.torcs87@gmail.com>
2   Charlto Youna   <youna.charlto4@yahoo.com>

相关问题 更多 >

    热门问题