2012-10-10 39 views
8

Giả sử tôi có một DataFrame với 100 nghìn hàng và cột name. Tôi muốn chia tên này thành họ và tên hiệu quả nhất có thể. Phương pháp hiện tại của tôi là,Áp dụng nhanh các hoạt động chuỗi trong gấu trúc DataFrame

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

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

Thật không may, DataFrame.apply thực sự rất chậm. Có bất cứ điều gì tôi có thể làm để làm cho hoạt động chuỗi này gần như nhanh như hoạt động numpy?

Cảm ơn!

+5

Nếu bạn có gấu trúc 0.8.1 trở lên, có vẻ như bạn sẽ có thể làm 'series.str.split()'. Tài liệu tại đây: http://pandas.pydata.org/pandas-docs/stable/basics.html#vectorized-string-methods –

Trả lời

18

Try (yêu cầu gấu trúc> = 0.8.1):

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

Hoàn hảo! Không biết về bổ sung này. – duckworthd

+0

Điều thú vị là câu hỏi này giống với câu hỏi này [sau này] (http://stackoverflow.com/questions/17116814/pandas-how-do-i-split-text-in-a-column-into-multiple-columns) nhưng phản hồi không đề cập đến 'Series.split()'. Nó đã bị xóa khỏi 'gấu trúc 'chưa? – LondonRob

+6

Nó hiện có sẵn dưới dạng 'Series.str.split()' – joris

Các vấn đề liên quan