web-dev-qa-db-fra.com

Extraction de colonnes spécifiques dans un tableau numpy

C'est une question facile mais disons que j'ai une matrice MxN. Tout ce que je veux faire, c'est extraire des colonnes spécifiques et les stocker dans un autre tableau numpy mais je reçois des erreurs de syntaxe non valides. Voici le code:

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

Il semble que la ligne ci-dessus devrait suffire mais je suppose que non. J'ai regardé autour de moi mais je n'ai rien trouvé d'intelligent concernant ce scénario spécifique.

134
Aladdin

Je suppose que vous vouliez des colonnes 1 et 9? C'est

data[:, [1, 9]]

Ou avec des noms:

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

Vous pouvez obtenir les noms de data.dtype.names

233
Fred Foo

En supposant que vous souhaitiez obtenir les colonnes 1 et 9 avec cet extrait de code, il devrait être:

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

si vous voulez extraire seulement quelques colonnes:

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

si vous souhaitez exclure des colonnes spécifiques:

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

Juste:

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

Les colonnes ne doivent pas nécessairement être en ordre:

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

Une chose que je voudrais souligner est que, si le nombre de colonnes que vous voulez extraire est 1, la matrice résultante ne serait pas une matrice Mx1 comme on pouvait s'y attendre, mais plutôt un tableau contenant les éléments de la colonne extraite.

Pour la convertir en matrice, utilisez la méthode refaçonner (M, 1) sur le tableau résultant.

2
Daksh

Vous pouvez utiliser :

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

1
Rahul

Une dernière chose à laquelle vous devriez faire attention lors de la sélection des colonnes du tableau N-D en utilisant une liste comme celle-ci:

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

Si vous supprimez une dimension (en sélectionnant une seule ligne, par exemple), le tableau résultant sera (pour une raison quelconque) permuté. Alors:

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

Je pense que la solution ici ne fonctionne plus avec une mise à jour de la version python, une façon de le faire avec une nouvelle fonction python est la suivante:

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

ce qui vous donne le résultat souhaité.

La documentation que vous pouvez trouver ici: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_numpy.html#pandas.DataFrame.to_numpy

0
PV8