Mengekstrak kolom tertentu dalam array numpy

164

Ini adalah pertanyaan yang mudah tetapi katakanlah saya memiliki matriks MXN. Yang ingin saya lakukan adalah mengekstrak kolom tertentu dan menyimpannya di array numpy lainnya tetapi saya mendapatkan kesalahan sintaks yang tidak valid. Ini kodenya:

extractedData = data[[:,1],[:,9]]. 

Sepertinya baris di atas sudah cukup tetapi saya kira tidak. Saya melihat sekeliling tetapi tidak dapat menemukan sintaks yang bijaksana mengenai skenario khusus ini.

Aladdin
sumber

Jawaban:

272

Saya menganggap Anda ingin kolom 1dan 9? Itu

data[:, [1, 9]]

Atau dengan nama:

data[:, ['Column Name1','Column Name2']]

Anda bisa mendapatkan namanya dari data.dtype.names...

Fred Foo
sumber
Bagaimana cara melakukannya dengan nama kolom?
Zelphir Kaltstahl
9
data [:, ['Nama Kolom1', 'Nama Kolom2']]
kode-assassin
apakah ini tampilan atau salinan? kemacetan saya ada pada baris ini saya mencari cara untuk mengoptimalkan
Fractale
1
mungkinkah fungsi ini tidak berfungsi lagi?
PV8
Disebut apakah sintaksis ini?
Burrito
29

Dengan asumsi Anda ingin mendapatkan kolom 1 dan 9 dengan potongan kode itu, seharusnya:

extractedData = data[:,[1,9]]
Michael J. Barber
sumber
14

jika Anda ingin mengekstrak hanya beberapa kolom:

idx_IN_columns = [1, 9]
extractedData = data[:,idx_IN_columns]

jika Anda ingin mengecualikan kolom tertentu:

idx_OUT_columns = [1, 9]
idx_IN_columns = [i for i in xrange(np.shape(data)[1]) if i not in idx_OUT_columns]
extractedData = data[:,idx_IN_columns]
antrian
sumber
9

Satu hal yang ingin saya tunjukkan adalah, jika jumlah kolom yang ingin Anda ekstrak adalah 1, matriks yang dihasilkan tidak akan menjadi Matriks Mx1 seperti yang Anda harapkan, melainkan array yang berisi elemen-elemen kolom yang Anda ekstrak.

Untuk mengonversikannya ke Matrix, metode membentuk kembali (M, 1) harus digunakan pada array yang dihasilkan.

Daksh
sumber
2
Anda juga dapat mencapainya dengan menggunakan titik dua, misalnya data[:, 8:9]. Ini mengambil delapan kolom tetapi tidak menghapus dimensi ekstra.
Jan Kukacka
data [:, 8] juga akan memilih kolom ke-8 dan mengembalikan Matriks
Mx1
5

Hanya:

>>> m = np.matrix(np.random.random((5, 5)))
>>> m
matrix([[0.91074101, 0.65999332, 0.69774588, 0.007355  , 0.33025395],
        [0.11078742, 0.67463754, 0.43158254, 0.95367876, 0.85926405],
        [0.98665185, 0.86431513, 0.12153138, 0.73006437, 0.13404811],
        [0.24602225, 0.66139215, 0.08400288, 0.56769924, 0.47974697],
        [0.25345299, 0.76385882, 0.11002419, 0.2509888 , 0.06312359]])
>>> m[:,[1, 2]]
matrix([[0.65999332, 0.69774588],
        [0.67463754, 0.43158254],
        [0.86431513, 0.12153138],
        [0.66139215, 0.08400288],
        [0.76385882, 0.11002419]])

Kolom tidak harus berurutan:

>>> m[:,[2, 1, 3]]
matrix([[0.69774588, 0.65999332, 0.007355  ],
        [0.43158254, 0.67463754, 0.95367876],
        [0.12153138, 0.86431513, 0.73006437],
        [0.08400288, 0.66139215, 0.56769924],
        [0.11002419, 0.76385882, 0.2509888 ]])
yanhh
sumber
2

Satu hal lagi yang harus Anda perhatikan ketika memilih kolom dari array ND menggunakan daftar seperti ini:

data[:,:,[1,9]]

Jika Anda menghapus dimensi (dengan memilih hanya satu baris, misalnya), array yang dihasilkan akan (karena alasan tertentu) permutasi . Begitu:

print data.shape            # gives [10,20,30]
selection = data[1,:,[1,9]]
print selection.shape       # gives [2,20] instead of [20,2]!!
Jan Kukacka
sumber
1

Kamu bisa memakai :

extracted_data = data.ix[:,['Column1','Column2']]

Rahul
sumber
2
Sebuah jawaban yang baik akan selalu memiliki penjelasan tentang apa yang telah dilakukan dan mengapa itu dilakukan sedemikian rupa, tidak hanya untuk OP tetapi untuk pengunjung masa depan ke SO. Silakan tambahkan beberapa deskripsi untuk membuat orang lain mengerti.
Rucha Bhatt Joshi
-1

Saya pikir solusinya di sini tidak bekerja dengan pembaruan versi python lagi, salah satu cara untuk melakukannya dengan fungsi python baru untuk itu adalah:

extracted_data = data[['Column Name1','Column Name2']].to_numpy()

yang memberi Anda hasil yang diinginkan.

Dokumentasi dapat Anda temukan di sini: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_numpy.html#pandas.DataFrame.to_numpy

PV8
sumber
pertanyaan dimulai dengan array numpy, bukan dataframe
TMrtSmith
-3

Anda juga dapat menggunakan extractedData = data ([:, 1], [:, 9])

Pranav Mahajan
sumber