2017-02-07 3 views
0

zu bekommen Ich hatte eine Aufgabe, den E-Mail-Namen Fullnamen, wie unten zu extrahieren (und meinen Code damit umgehen)Effiziente Weise E-Mail Name

list_=['peter mary','peter mary david ','pop david','peter pop ronaldo bulma'] 
sr=pd.Series(list_,range(4)) 
sr_split=sr.str.split() 
first_name=sr_split.str[-1] 
other_name=sr_split.str[0:-1] 
other_name=other_name.str.join(' ') 
other_=other_name.str.split(expand=True) 
other_.fillna(' ',inplace=True) 
add_name=other_[0].str[0]+other_[1].str[0]+other_[2].str[0] 
email_name=pd.concat([first_name,add_name],axis=1) 
email_name[2]=email_name[0]+email_name[1] 

Mein Code zurückgegeben:

maryp, davidpm,davidp,bulmappr 

Es wie mein expectation.However funktioniert haben, sind es 2 Probleme mit meinem Code: 1) eine Menge von geteilten Nutzung und 2) arbeiten kann nicht mit langen Namen, sagen verbinden: name mit 10 Worten

Ist es ein Weg, es besser zu machen?

+0

Sie sollten ein Beispiel hinzufügen, was der Code im allgemeinen Fall tun soll. –

Antwort

0

Dies sollte es tun.

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) 
1

Wie wäre es mit Anwenden und String-Methoden?

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 
+0

statt 'str.split ('')' ist möglich verwenden 'str.split()' – jezrael

+0

Tks viel. Ihr Code ist umwerfend schön. Als ein Nicht-Programmierer ist mein Wissen über die Schleife sehr begrenzt – ducvu169

Verwandte Themen