将电子邮件“发件人”字段的pandas DataFrame拆分为发件人姓名,电子邮件地址

时间:2015-09-18 04:01:24

标签: python python-2.7 pandas

我有一个SocketRocket send()由一个列组成,该列是从电子邮件的发件人字段中提取的,例如

pandas

我想利用Dataframe访问者将数据拆分为两列,这样第一列是 Name ,包含实际名称(名字姓氏),第二列电子邮件,包含电子邮件地址。)

如果我使用:

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

这几乎是我需要的东西,但是它将姓氏放在电子邮件列中(即它将str中的最后两个项目放入此列中)。如何修改这个以便df = pd.DataFrame(df.From.str.split(' ',1).tolist(), columns = ['Name','Email']) 知道在填充第一列时第一个空格后停止?

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

split()

2 个答案:

答案 0 :(得分:3)

您可以使用rsplit()代替split()来反向拆分。示例 -

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>

答案 1 :(得分:0)

您可以传递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>