我有一个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()
答案 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>