Załóżmy, że mam następujący numpy wektorWyodrębnianie i przekształcania danych w numpy
[[1, 3., 'John Doe', 'male', 'doc', '25'],
...,
[9, 6., 'Jane Doe', 'female', 'p', '28']]
muszę wyodrębnić istotne dla moich danych konkurencji.
Jako nowicjusz w numpy i python w ogóle, chciałbym zrobić to w następujący sposób:
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]
I w rezultacie mam następujący:
[[ 3., 0., 25.],
[ 6., 1., 28.]]
Co chciałbym wiedzieć, czy istnieje bardziej wydajny lub czystszy sposób wykonania tego.
Czy ktokolwiek może mi w tym pomóc?
Kilka uwag - 'np.array' jest przylegająca obiektu, oznacza to, że każdy element musi być ten sam typ, więc wynik 'danych' jest już listą ciągów znaków, ponieważ nie można przekazać łańcuchów" męskich "i innych do typu numerica. Lepiej używać list. – Chinny84
Spójrz na 'dane'. Jest to tablica łańcuchów (2,6), a nie liczb mieszanych i łańcuchów. "data_tr" z drugiej strony jest domyślnym 'float' dtype. Podczas przypisywania z 'data' do' data_tr' 'numpy' próbuje przekonwertować ciąg na float. W tym przypadku działa. Ale jeśli źle ustawisz kolumny, może to spowodować błąd. – hpaulj