String 获取电子邮件名称的有效方法
我的任务是从全名中提取电子邮件名称,如下所示(以及处理该名称的代码) 我的代码返回:String 获取电子邮件名称的有效方法,string,pandas,String,Pandas,我的任务是从全名中提取电子邮件名称,如下所示(以及处理该名称的代码) 我的代码返回: maryp, davidpm,davidp,bulmappr 这是我的期望。但是,我的代码有两个问题: 1) 使用大量的拆分和联接 2) 不能用长名字,说:名字用10个字 这是一种让它变得更好的方法吗?这应该可以 list_=['peter mary','peter mary david ','pop david','peter pop ronaldo bulma'] def mk_email_name
maryp, davidpm,davidp,bulmappr
这是我的期望。但是,我的代码有两个问题:
1) 使用大量的拆分和联接
2) 不能用长名字,说:名字用10个字
这是一种让它变得更好的方法吗?这应该可以
list_=['peter mary','peter mary david ','pop david','peter pop ronaldo bulma']
def mk_email_name(x):
#get names
names = x.split(' ')
if len(names) == 1:
return x
else:
#get first name
fn = names[0]
#get last_names
lns = ''.join(map(lambda y:y[:1], names[1:]))
email = '%s%s' % (fn, lns)
return email
#apply without pandas
print map(mk_email_name, list_)
# ['peterm', 'petermd', 'popd', 'peterprb']
#apply on pandas df
df = pd.DataFrame(list_, columns=['full_name'])
df['email'] = df.full_name.apply(mk_email_name)
使用apply和string方法怎么样
In [469]: (sr.str.strip().str.split(' ')
.apply(lambda x: x[-1] + ''.join([y[0] for y in x[:-1]]))
)
Out[469]:
0 maryp
1 davidpm
2 davidp
3 bulmappr
dtype: object
您应该添加一个示例,说明您希望代码在一般情况下执行的操作。相反,可以使用
str.split(“”)
大量使用str.split()
Tks。你的代码非常漂亮。作为一名非程序员,我对循环的了解非常有限
In [469]: (sr.str.strip().str.split(' ')
.apply(lambda x: x[-1] + ''.join([y[0] for y in x[:-1]]))
)
Out[469]:
0 maryp
1 davidpm
2 davidp
3 bulmappr
dtype: object