2017-09-17 21 views
6

Giả sử tôi có vector NumPy sauTrích xuất và chuyển dữ liệu trong NumPy

[[1, 3., 'John Doe', 'male', 'doc', '25'], 
    ..., 
[9, 6., 'Jane Doe', 'female', 'p', '28']] 

tôi cần phải giải nén dữ liệu liên quan đến nhiệm vụ của tôi.

Là một người mới trong NumPy và trăn nói chung, tôi sẽ làm điều đó theo cách sau đây:

data = np.array(
[[1, 3., 'John Doe', 'male', 'doc', 25], 
[9, 6., 'Jane Doe', 'female', 'p', 28]] 
) 

data_tr = np.zeros((data.shape[0], 3)) 
for i in range(0, data.shape[0]): 
    data_tr[i][0] = data[i, 1] 
    data_tr[i][1] = 0 if data[i, 3] == 'male' else 1 
    data_tr[i][2] = data[i, 5] 

Và kết quả là tôi đã điều sau đây:

[[ 3., 0., 25.], 
[ 6., 1., 28.]] 

Những gì tôi muốn để biết là nếu có một cách hiệu quả hơn hoặc sạch hơn để thực hiện điều đó.
Ai đó có thể giúp tôi với điều đó không?

+1

Một vài ý kiến ​​- Một 'np.array' là một đối tượng tiếp giáp, điều này có nghĩa là mọi phần tử phải là cùng một loại vì vậy kết quả của 'dữ liệu' đã là một danh sách các chuỗi vì bạn không thể marshall các 'nam' và các chuỗi khác để một loại numerica. Tốt hơn để sử dụng Danh sách. – Chinny84

+0

Xem 'dữ liệu'. Đó là một chuỗi (2,6) của chuỗi, không phải là số và chuỗi hỗn hợp. 'data_tr' mặt khác là mặc định' float' dtype. Khi gán từ 'data' vào' data_tr' 'numpy' sẽ cố gắng chuyển chuỗi thành float. Trong trường hợp này nó hoạt động. Nhưng nếu bạn nhận được các cột sai nó có thể đưa ra một lỗi. – hpaulj

Trả lời

5

Một cách tiếp cận với column-indexing -

data_tr = np.zeros((data.shape[0], 3)) 
data_tr[:,[0,2]] = data[:, [1,5]] 
data_tr[:,1] = data[:,3]=='male' 

Lưu ý rằng các bước: data_tr[:,[0,2]] = data[:, [1,5]] đang làm việc với các bản sao tắt các cột tương ứng. Đó không phải là rất hiệu quả cho các bài tập và khai thác. Vì vậy, bạn có thể muốn thực hiện điều đó theo hai bước riêng biệt, chủ yếu cho hiệu suất, như vậy -

data_tr[:,0] = data[:, 1] 
data_tr[:,2] = data[:, 5] 
+1

đọc lại nhận xét có vẻ như bạn thực sự chỉ thảo luận về phần 'thuật toán'. Mặc dù bạn nên trỏ người dùng vào Danh sách cho bit đầu tiên. +1 – Chinny84

+1

@ Chinny84 Tôi không biết nguồn đầu vào. Do đó, tôi không có vị trí để tha thứ hoặc không tha thứ cho các yếu tố đầu vào. Là người trả lời tôi bắt đầu từ các đầu vào đã cho và cố gắng để đạt được kết quả mong muốn. Tôi không chắc chắn rằng câu trả lời mối quan tâm của bạn, nhưng tôi hy vọng nó. – Divakar

+0

Xin chào, Divakar! Cảm ơn câu trả lời, đó chắc chắn là những gì tôi đang tìm kiếm! Trong khi phần chính chắc chắn đã được trả lời, tôi muốn hỏi về các phương pháp hay nhất xử lý dữ liệu như tôi. Như @ Chinny84 đã chỉ ra (và như tôi nghi ngờ), tôi chắc chắn không sử dụng cách tiếp cận BES. –

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