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.

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...


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]]

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]

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.


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 ]])

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]!!

1

Kamu bisa memakai :

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


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


pertanyaan dimulai dengan array numpy, bukan dataframe
TMrtSmith

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.