Extrahieren bestimmter Spalten in einem Numpy-Array

163

Dies ist eine einfache Frage, aber ich habe eine MxN-Matrix. Ich möchte nur bestimmte Spalten extrahieren und in einem anderen Numpy-Array speichern, erhalte jedoch ungültige Syntaxfehler. Hier ist der Code:

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

Es scheint, als ob die obige Zeile ausreichen sollte, aber ich denke nicht. Ich habe mich umgesehen, konnte aber in Bezug auf dieses spezielle Szenario keine Syntax finden.

Aladdin
quelle

Antworten:

271

Ich nehme an, Sie wollten Spalten 1und 9? Das ist

data[:, [1, 9]]

Oder mit Namen:

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

Sie können die Namen von erhalten data.dtype.names...

Fred Foo
quelle
Wie geht das mit Spaltennamen?
Zelphir Kaltstahl
9
Daten [:, ['Spaltenname1', 'Spaltenname2']]
Code-Attentäter
ist es eine Ansicht oder eine Kopie? Mein Engpass ist in dieser Zeile Ich suche Weg zu optimieren
Fractale
1
Könnte es sein, dass diese Funktion nicht mehr funktioniert?
PV8
Wie heißt diese Syntax?
Burrito
29

Angenommen, Sie möchten die Spalten 1 und 9 mit diesem Codeausschnitt erhalten, sollte dies sein:

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

Wenn Sie nur einige Spalten extrahieren möchten:

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

Wenn Sie bestimmte Spalten ausschließen möchten:

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]
Warteschlange
quelle
9

Eine Sache, auf die ich hinweisen möchte, ist, dass wenn die Anzahl der Spalten, die Sie extrahieren möchten, 1 ist, die resultierende Matrix keine Mx1-Matrix wäre wie erwartet sondern ein Array, das die Elemente der von Ihnen extrahierten Spalte enthält.

Um es in Matrix zu konvertieren, sollte die Reshape- Methode (M, 1) für das resultierende Array verwendet werden.

Daksh
quelle
2
Sie können dies auch erreichen, indem Sie beispielsweise einen Doppelpunkt verwenden data[:, 8:9]. Dies dauert die achte Spalte, entfernt jedoch nicht die zusätzliche Dimension.
Jan Kukacka
data [:, 8]
wählt
5

Gerade:

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

Die Spalten müssen nicht in der richtigen Reihenfolge sein:

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

Eine weitere Sache, die Sie beachten sollten, wenn Sie Spalten aus dem ND-Array mithilfe einer Liste wie dieser auswählen:

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

Wenn Sie eine Dimension entfernen (indem Sie beispielsweise nur eine Zeile auswählen), wird das resultierende Array (aus irgendeinem Grund) permutiert . So:

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

Sie können verwenden:

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

Rahul
quelle
2
Eine gute Antwort wird immer eine Erklärung darüber enthalten, was getan wurde und warum es so getan wurde, nicht nur für das OP, sondern auch für zukünftige Besucher von SO. Bitte fügen Sie eine Beschreibung hinzu, damit andere sie verstehen.
Rucha Bhatt Joshi
-1

Ich denke, die Lösung hier funktioniert nicht mehr mit einem Update der Python-Version. Eine Möglichkeit, dies mit einer neuen Python-Funktion zu tun, ist:

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

das gibt Ihnen das gewünschte Ergebnis.

Die Dokumentation finden Sie hier: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_numpy.html#pandas.DataFrame.to_numpy

PV8
quelle
Die Frage beginnt mit einem numpy Array, nicht einem Datenrahmen
TMrtSmith
-3

Sie können auch extractData = data ([:, 1], [:, 9]) verwenden.

Pranav Mahajan
quelle