2012-10-10 23 views
8

DataFrameに100k行、列にnameがあるものとします。この名前をできるだけ効率的に姓と名に分けたいと思います。私の現在の方法は残念ながら、DataFrame.applyは本当に、本当に遅いです、素早くpandas DataFrameに文字列演算を適用する

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

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

です。この文字列操作をnumpy操作とほぼ同じ速さにするためにできることはありますか?

ありがとうございます!

+5

あなたは上記のパンダ0.8.1以上をお持ちの場合は、 'series.str.splitを()'行うことができる必要がありますように、それが見えます。ここのドキュメント: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

関連する問題