web-dev-qa-db-ja.com

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

これは簡単な質問ですが、MxN行列があります。私がしたいのは、特定の列を抽出して別のnumpy配列に保存することですが、無効な構文エラーが発生します。コードは次のとおりです。

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

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

127
Aladdin

1列と9列が必要だと思いますか?それは

data[:, [1, 9]]

または名前付き:

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

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

223
Fred Foo

そのコードスニペットで列1と9を取得すると仮定すると、次のようになります。

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

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

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
queise

ただ:

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

私が指摘したいことの1つは、抽出する列の数が1である場合、結果の行列です mx1マトリックスではないだろう 予想どおりかもしれませんが、代わりに抽出した列の要素を含む配列。

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

2
Daksh

以下を使用できます。

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

1
Rahul

次のようなリストを使用してN-D配列から列を選択する場合、もう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
Jan Kukacka

ここでの解決策は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

0
PV8