Wissen Sie, wie Sie den Index oder die Spalte eines DataFrame als NumPy-Array oder Python-Liste abrufen können?
Wissen Sie, wie Sie den Index oder die Spalte eines DataFrame als NumPy-Array oder Python-Liste abrufen können?
Antworten:
Um ein NumPy-Array zu erhalten, sollten Sie das folgende valuesAttribut verwenden:
In [1]: df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]}, index=['a', 'b', 'c']); df
A B
a 1 4
b 2 5
c 3 6
In [2]: df.index.values
Out[2]: array(['a', 'b', 'c'], dtype=object)
Dadurch wird darauf zugegriffen, wie die Daten bereits gespeichert sind, sodass keine Konvertierung erforderlich ist.
Hinweis: Dieses Attribut ist auch für viele andere Pandas-Objekte verfügbar.
In [3]: df['A'].values
Out[3]: Out[16]: array([1, 2, 3])
Um den Index als Liste abzurufen, rufen Sie auf tolist:
In [4]: df.index.tolist()
Out[4]: ['a', 'b', 'c']
Und ähnlich für Spalten.
.valuesist veraltet, .to_numpy()ist der vorgeschlagene Ersatz, wenn Sie ein NumPy-Array möchten. Können Sie erweitern auf Dies greift darauf zu, wie die Daten bereits gespeichert sind, sodass keine Konvertierung erforderlich ist .
Sie können verwenden, df.indexum auf das Indexobjekt zuzugreifen und dann die Werte in einer Liste mit abzurufen df.index.tolist(). Ebenso können Sie df['col'].tolist()für Serien verwenden.
df.index.values.tolist()
df.index.tolist()gibt keine Instanzmethode zurück. Es wird eine Liste von Indizes zurückgegeben. Es ist eine Methode, die im Pandas-Index definiert ist. Während das erstmalige Aufrufen von Werten möglich ist, ist das Delegieren des Jobs an numpy keine Korrektur, sondern nur eine Alternative.
.valueszugunsten dieser Methoden!Von v0.24.0 an werden wir zwei neue, bevorzugte Verfahren Prügel Marke haben für den Erhalt NumPy Arrays aus Index, Seriesund DataFrameObjekte: sie sind to_numpy(), und .array. In Bezug auf die Verwendung erwähnen die Dokumente:
Wir haben nicht entfernt oder veraltet
Series.valuesoderDataFrame.values, aber wir empfehlen und verwenden.arrayoder.to_numpy()stattdessen.
Weitere Informationen finden Sie in diesem Abschnitt der Versionshinweise zu Version 0.24.0 .
df.index.to_numpy()
# array(['a', 'b'], dtype=object)
df['A'].to_numpy()
# array([1, 4])
Standardmäßig wird eine Ansicht zurückgegeben. Alle vorgenommenen Änderungen wirken sich auf das Original aus.
v = df.index.to_numpy()
v[0] = -1
df
A B
-1 1 2
b 4 5
Wenn Sie stattdessen eine Kopie benötigen, verwenden Sie to_numpy(copy=True);
v = df.index.to_numpy(copy=True)
v[-1] = -123
df
A B
a 1 2
b 4 5
Beachten Sie, dass diese Funktion auch für DataFrames funktioniert (während .arraydies nicht der Fall ist).
arrayAttribut
Dieses Attribut gibt einExtensionArrayObjekt zurück, das den Index / die Serie unterstützt.
pd.__version__
# '0.24.0rc1'
# Setup.
df = pd.DataFrame([[1, 2], [4, 5]], columns=['A', 'B'], index=['a', 'b'])
df
A B
a 1 2
b 4 5
df.index.array
# <PandasArray>
# ['a', 'b']
# Length: 2, dtype: object
df['A'].array
# <PandasArray>
# [1, 4]
# Length: 2, dtype: int64
Von hier aus ist es möglich, eine Liste zu erhalten, indem Sie list:
list(df.index.array)
# ['a', 'b']
list(df['A'].array)
# [1, 4]
oder rufen Sie einfach direkt an .tolist():
df.index.tolist()
# ['a', 'b']
df['A'].tolist()
# [1, 4]
In Bezug auf das, was zurückgegeben wird, erwähnen die Dokumente:
Für
SeriesundIndexes, die von normalen NumPy-Arrays unterstützt werden,Series.arraywird ein neuer zurückgegebenarrays.PandasArray, bei dem es sich um einen dünnen Wrapper (ohne Kopie) um a handeltnumpy.ndarray.arrays.PandasArrayist für sich genommen nicht besonders nützlich, bietet jedoch dieselbe Schnittstelle wie jedes Erweiterungsarray, das in Pandas oder von einer Bibliothek eines Drittanbieters definiert ist.
Zusammenfassend .arraywird also entweder zurückkehren
ExtensionArrayUnterstützung des Index / der Serie oderExtensionArrayObjekt als Thin Wrapper über dem zugrunde liegenden Array erstellt.Begründung für das Hinzufügen von ZWEI neuen Methoden
Diese Funktionen wurden als Ergebnis von Diskussionen unter zwei GitHub-Problemen GH19954 und GH23623 hinzugefügt .
In den Dokumenten wird insbesondere die Begründung erwähnt:
[...]
.valuesdabei war unklar, ob der zurückgegebene Wert das tatsächliche Array, eine Transformation davon oder eines der benutzerdefinierten Pandas-Arrays (wieCategorical) sein würde. Zum Beispiel mitPeriodIndex,.valueserzeugt eine neuendarrayPerioden Objekte jedes Mal. [...]
Diese beiden Funktionen zielen darauf ab, die Konsistenz der API zu verbessern, was ein wichtiger Schritt in die richtige Richtung ist.
Schließlich .valueswird es in der aktuellen Version nicht veraltet sein, aber ich gehe davon aus, dass dies irgendwann in der Zukunft passieren wird. Daher möchte ich die Benutzer dringend bitten, so bald wie möglich auf die neuere API zu migrieren.
Seit pandas v0.13 können Sie auch verwenden get_values:
df.index.get_values()
get_valuesruft einfach an .values. Es müssen mehr Zeichen eingegeben werden.
Ich konvertierte die Pandas dataframezu listund benutzte dann das Basic list.index(). Etwas wie das:
dd = list(zone[0]) #Where zone[0] is some specific column of the table
idx = dd.index(filename[i])
Sie haben Ihren Indexwert als idx.
Eine neuere Möglichkeit hierfür ist die Verwendung der Funktion .to_numpy ().
Wenn ich einen Datenrahmen mit der Spalte 'Preis' habe, kann ich ihn wie folgt konvertieren:
priceArray = df['price'].to_numpy()
Sie können auch den Datentyp wie float oder object als Argument der Funktion übergeben
Im Folgenden finden Sie eine einfache Möglichkeit, die Datenrahmenspalte in ein Numpy-Array zu konvertieren.
df = pd.DataFrame(somedict)
ytrain = df['label']
ytrain_numpy = np.array([x for x in ytrain['label']])
ytrain_numpy ist ein Numpy-Array.
Ich habe es mit versucht, to.numpy()aber es gab mir den folgenden Fehler:
TypeError: Keine unterstützte Konvertierung für Typen: (dtype ('O'),) während der Klassifizierung der binären Relevanz mit linearem SVC. to.numpy () konvertierte den dataFrame in ein numpy-Array, aber der Datentyp des inneren Elements war list, weshalb der obige Fehler beobachtet wurde.
to_numpy.