HINWEIS: Wenn Sie Pandas DataFrame in ein Array (oder eine Liste) wie dieses konvertieren müssen, kann dies auf andere Probleme hinweisen. Ich empfehle dringend sicherzustellen, dass ein DataFrame die geeignete Datenstruktur für Ihren speziellen Anwendungsfall ist und dass Pandas keine Möglichkeit zur Ausführung der Operationen enthält, an denen Sie interessiert sind.
AMC
Antworten:
353
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 14
b 25
c 36In[2]: df.index.valuesOut[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.
Hinweis: .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 .
AMC
Die Antwort von cs95 gibt eine gute Erklärung für .values, .to_numpy()und .array.
AMC
75
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.
Es gibt instanceMethod und kein Listenarray zurück
V Shreyas
12
@VShreyas, wie wäre esdf.index.values.tolist()
LancelotHolmes
3
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.
Ayhan
49
Pandas> = 0,24
Verwerfen Sie Ihre Verwendung .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.valuesoder
DataFrame.values, aber wir empfehlen und verwenden .arrayoder
.to_numpy()stattdessen.
In Bezug auf das, was zurückgegeben wird, erwähnen die Dokumente:
Für Seriesund Indexes, die von normalen NumPy-Arrays unterstützt werden, Series.array
wird ein neuer zurückgegeben arrays.PandasArray, bei dem es sich um einen dünnen Wrapper (ohne Kopie) um a handelt numpy.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
Die vorhandene ExtensionArrayUnterstützung des Index / der Serie oder
Wenn ein NumPy-Array die Serie unterstützt, wird ein neues ExtensionArrayObjekt 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 (wie Categorical) sein würde. Zum Beispiel mit PeriodIndex, .values
erzeugt eine neue ndarrayPerioden 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.
Wenn Sie mit einem Multi-Index-Datenrahmen arbeiten, möchten Sie möglicherweise nur die Spalte eines Namens des Multi-Index extrahieren. Sie können dies als tun
df.index.get_level_values('name_sub_index')
und name_sub_indexmuss natürlich ein element der seinFrozenListdf.index.names
Gibt es einen Unterschied zwischen diesem und .Werten? (Ich habe die Versionsinformationen aktualisiert, da diese Funktion aus den 0.13.0-Dokumenten hervorgeht.)
Andy Hayden
@Andy Hayden: Ist es nicht ein Unterschied, dass .get_values der offizielle Weg ist, nur die aktuellen Werte abzurufen, während .values (z. B. in einem Multi-Index) Indexwerte zurückgeben kann, für die die Zeilen oder Spalten gelöscht wurden?
Ezekiel Kruglick
@EzekielKruglick also ist es immer eine Kopie? Die mit der Dokumentation verknüpfte Dokumentation ist sehr leicht. Ich hätte nicht gedacht, dass Sie solche Dupes bekommen (selbst wenn sie im MI sind, werden sie nicht in den .Werten sein). Es wäre großartig, ein Beispiel zu sehen, das dies demonstriert!
Andy Hayden
@AndyHayden: Ich glaube, ich habe deinen Kommentar falsch gelesen. Sie haben Recht, .values ist gut, .level gibt veraltete und get_values gibt Ihnen die aktuellen Werte ohne ausgelassene Zeilen / Spalten. Ursprüngliches Github-Problem: github.com/pydata/pandas/issues/3686 Aber ich habe es gerade überprüft und es sieht so aus, als ob .values (natürlich!) Aktuelle Informationen nur in einer anderen Form liefert, als ich dachte, worüber wir gesprochen haben
Ezekiel Kruglick
1
@AndyHayden Nein, es gibt keinen Unterschied. get_valuesruft einfach an .values. Es müssen mehr Zeichen eingegeben werden.
CS95
0
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])
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.
Ich habe es mit to.numpy () versucht, 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. Das ist aber nicht wirklich die Schuld von to_numpy.
Antworten:
Um ein NumPy-Array zu erhalten, sollten Sie das folgende
values
Attribut verwenden: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.
Um den Index als Liste abzurufen, rufen Sie auf
tolist
:Und ähnlich für Spalten.
quelle
.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 ..values
,.to_numpy()
und.array
.Sie können verwenden,
df.index
um auf das Indexobjekt zuzugreifen und dann die Werte in einer Liste mit abzurufendf.index.tolist()
. Ebenso können Siedf['col'].tolist()
für Serien verwenden.quelle
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.Pandas> = 0,24
Verwerfen Sie Ihre Verwendung
.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
undDataFrame
Objekte: sie sindto_numpy()
, und.array
. In Bezug auf die Verwendung erwähnen die Dokumente:Weitere Informationen finden Sie in diesem Abschnitt der Versionshinweise zu Version 0.24.0 .
to_numpy()
MethodeStandardmäßig wird eine Ansicht zurückgegeben. Alle vorgenommenen Änderungen wirken sich auf das Original aus.
Wenn Sie stattdessen eine Kopie benötigen, verwenden Sie
to_numpy(copy=True
);Beachten Sie, dass diese Funktion auch für DataFrames funktioniert (während
.array
dies nicht der Fall ist).array
AttributDieses Attribut gibt ein
ExtensionArray
Objekt zurück, das den Index / die Serie unterstützt.Von hier aus ist es möglich, eine Liste zu erhalten, indem Sie
list
:oder rufen Sie einfach direkt an
.tolist()
:In Bezug auf das, was zurückgegeben wird, erwähnen die Dokumente:
Zusammenfassend
.array
wird also entweder zurückkehrenExtensionArray
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:
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.quelle
Wenn Sie mit einem Multi-Index-Datenrahmen arbeiten, möchten Sie möglicherweise nur die Spalte eines Namens des Multi-Index extrahieren. Sie können dies als tun
und
name_sub_index
muss natürlich ein element der seinFrozenList
df.index.names
quelle
Seit pandas v0.13 können Sie auch verwenden
get_values
:quelle
get_values
ruft einfach an.values
. Es müssen mehr Zeichen eingegeben werden.Ich konvertierte die Pandas
dataframe
zulist
und benutzte dann das Basiclist.index()
. Etwas wie das:Sie haben Ihren Indexwert als
idx
.quelle
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:
Sie können auch den Datentyp wie float oder object als Argument der Funktion übergeben
quelle
Im Folgenden finden Sie eine einfache Möglichkeit, die Datenrahmenspalte in ein Numpy-Array zu konvertieren.
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.quelle
to_numpy
.