2012-10-10 39 views
8

假設我有一個帶有100k行的DataFrame和一列name。我想盡可能有效地將這個名字分成姓和名。我目前的方法是,在熊貓DataFrame中快速應用字符串操作

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

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

不幸的是,DataFrame.apply真的很慢。我能做些什麼來使這個字符串操作幾乎和numpy操作一樣快?

謝謝!

+5

如果你有大熊貓0.8.1或以上,它看起來像你應該能夠做到'series.str.split()'。 Docs here:http://pandas.pydata.org/pandas-docs/stable/basics.html#vectorized-string-methods –

回答

18

嘗試(需要熊貓> = 0.8.1):

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

完美!不知道這個補充。 – duckworthd

+0

有趣的是,這個問題與[稍後的]相同(http://stackoverflow.com/questions/17116814/pandas-how-do-i-split-text-in-a-column-into-multiple-columns)但是響應沒有提及'Series.split()'。它是否已從'pandas'中移除? – LondonRob

+6

它現在可以'Series.str.split()' – joris