将电子邮件'From'字段的熊猫数据帧拆分为发件人姓名、电子邮件地址



我有一个由单列组成的pandas Dataframe,这是从中提取的字段的电子邮件,例如

                                                   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,包含实际的名字(名字和姓氏),第二列Email,包含电子邮件地址。

如果我使用:

df = pd.DataFrame(df.From.str.split(' ',1).tolist(),
                                   columns = ['Name','Email'])

这是几乎我需要的,但它把姓氏放在电子邮件列(即它把split()的最后两个项目放到这个列)。我如何修改这一点,使split()知道在填充第一列时在第一个空格后停止?

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

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

您可以使用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>

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

最新更新