2012-10-10 13 views
8

Angenommen, ich habe eine DataFrame mit 100k Zeilen und eine Spalte name. Ich möchte diesen Namen so effizient wie möglich in Vor- und Nachnamen aufteilen. Meine aktuelle Methode ist,Schnell anwenden String-Operationen in einem Pandas DataFrame

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

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

Leider DataFrame.apply ist wirklich, wirklich langsam. Gibt es etwas, was ich tun kann, um diese String-Operation fast so schnell wie eine numpy Operation zu machen?

Danke!

+5

Wenn Sie Pandas 0.8.1 oder höher haben, sieht es aus wie Sie sollten in der Lage 'series.str.split()' zu tun. Dokumente hier: http://pandas.pydata.org/pandas-docs/stable/basics.html#vectorized-string-methoden –

Antwort

18

Try (erfordert Pandas> = 0.8.1):

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

Perfekt! Ich wusste nichts von diesem Zusatz. – duckworthd

+0

Interessanterweise ist diese Frage identisch mit [diesem späteren] (http://stackoverflow.com/questions/17116814/pandas-how-do-i-split-text-in-a-column-into-multiple-columns) aber die Antwort hat keine Erwähnung von 'Series.split()'. Wurde es aus 'Pandas' entfernt? – LondonRob

+6

Es ist jetzt als 'Series.str.split()' verfügbar – joris