2012-10-10 17 views
8

Supongamos que tengo un DataFrame con 100k filas y una columna name. Me gustaría dividir este nombre en nombre y apellido con la mayor eficacia posible. Mi método actual es,Aplicación rápida de operaciones de cadena en un panda DataFrame

def splitName(name): 
    return pandas.Series(name.split()[0:2]) 

df[['first', 'last']] = df.apply(lambda x: splitName(x['name']), axis=1) 

Desafortunadamente, DataFrame.apply es muy, muy lento. ¿Hay algo que pueda hacer para que esta operación de cadena sea tan rápida como una operación numpy?

Gracias!

+5

Si usted tiene pandas 0.8.1 o superior, parece que usted debería ser capaz de hacer 'series.str.split()'. Documentos aquí: http://pandas.pydata.org/pandas-docs/stable/basics.html#vectorized-string-methods –

Respuesta

18

Try (requiere pandas> = 0.8.1):

splits = x['name'].split() 
df['first'] = splits.str[0] 
df['last'] = splits.str[1] 
+1

¡Perfecto! No sabía acerca de esta adición. – duckworthd

+0

Curiosamente, esta pregunta es idéntica a [esta última] (http://stackoverflow.com/questions/17116814/pandas-how-do-i-split-text-in-a-column-into-multiple-columns) pero la respuesta no menciona "Series.split()'. ¿Ha sido eliminado de 'pandas'? – LondonRob

+6

Ahora está disponible como 'Serie.str.split()' – joris

Cuestiones relacionadas