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