numpy配列の特定の列を抽出する


164

これは簡単な質問ですが、MxNマトリックスがあると言います。特定の列を抽出して別のnumpy配列に格納するだけですが、無効な構文エラーが発生します。これがコードです:

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

上記の行で十分のようですが、私はそうは思いません。私は見回しましたが、この特定のシナリオに関して賢明な構文を見つけることができませんでした。

回答:


272

私はあなたが列を望んでいたと仮定1して9?それは

data[:, [1, 9]]

または名前付き:

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

名前はdata.dtype.names… から取得できます。


列名でそれを行う方法は?
Zelphir Kaltstahl 2016年

9
data [:, ['Column Name1'、 'C​​olumn Name2']]
code-assassin

ビューですか、それともコピーですか?私のボトルネックはこの行にあります私は最適化する方法を探しています
Fractale

1
この機能が動作していない可能性がありますか?
PV8

この構文は何と呼ばれますか?
ブリトー


14

一部の列のみを抽出する場合:

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

特定の列を除外する場合:

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

指摘したいことの1つは、抽出する列の数が1の場合、結果の行列期待どおりのMx1行列ではなく、抽出した列の要素を含む配列です。

これをMatrixに変換するには、結果の配列でreshape(M、1)メソッドを使用する必要があります。


2
また、コロンなどを使用してこれを実現することもできますdata[:, 8:9]。これは8列を使用しますが、余分な次元は削除しません。
Jan Kukacka

data [:、8]も8列目を選択してMx1マトリックスを返します
StefanMK

5

ただ:

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

列は順番に並んでいる必要はありません。

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

次のようなリストを使用してND配列から列を選択するときに注意すべきもう1つのこと:

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

(たとえば、1つの行のみを選択することによって)次元を削除する場合、結果の配列は(何らかの理由で)置換されます。そう:

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

1

使用できます:

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


2
良い答えは常に、OPだけでなく、SOへの将来の訪問者のために、何が行われたか、なぜそのように行われたのかについての説明があります。他の人が理解できるように説明を追加してください。
Rucha Bhatt Joshi 2017

-1

私はここでの解決策がもはやpythonバージョンの更新で機能していないと思います、それのための新しいpython関数でそれを行う1つの方法は次のとおりです:

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

これにより、望ましい結果が得られます。

ここにあるドキュメント:https : //pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_numpy.html#pandas.DataFrame.to_numpy


質問はデータフレームではなく派手な配列で始まります
TMrtSmith

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.