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 values
Attribut 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.
.values
ist 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.index
um 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.
.values
zugunsten 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
, Series
und DataFrame
Objekte: sie sind to_numpy()
, und .array
. In Bezug auf die Verwendung erwähnen die Dokumente:
Wir haben nicht entfernt oder veraltet
Series.values
oderDataFrame.values
, aber wir empfehlen und verwenden.array
oder.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 .array
dies nicht der Fall ist).
array
Attribut
Dieses Attribut gibt einExtensionArray
Objekt 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
Series
undIndex
es, die von normalen NumPy-Arrays unterstützt werden,Series.array
wird ein neuer zurückgegebenarrays.PandasArray
, bei dem es sich um einen dünnen Wrapper (ohne Kopie) um a handeltnumpy.ndarray
.arrays.PandasArray
ist 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 .array
wird also entweder zurückkehren
ExtensionArray
Unterstützung des Index / der Serie oderExtensionArray
Objekt 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:
[...]
.values
dabei 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
,.values
erzeugt eine neuendarray
Perioden 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 .values
wird 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_values
ruft einfach an .values
. Es müssen mehr Zeichen eingegeben werden.
Ich konvertierte die Pandas dataframe
zu list
und 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
.