So wählen Sie die letzte Spalte des Datenrahmens aus


75

Ich habe nach der Antwort auf diese Frage gesucht, aber alles, was ich herausfinden kann, ist Folgendes:

df[df.columns[len(df.columns)-1]]

was mir unweildy und unpythonisch (und langsam?) erscheint.

Was ist der einfachste Weg, um die Daten für die letzte Spalte in einem Pandas-Datenrahmen auszuwählen, ohne den Namen der Spalte anzugeben?

Antworten:


134

Verwenden Sie iloc und wählen Sie alle Zeilen ( :) für die letzte Spalte ( -1) aus:

df.iloc[:,-1:]

6
Ich habe versucht, das zu tun und bekam eine Fehlermeldung "zu viele Indexer"
user287474

31

Etwas ähnlich wie bei Ihrem ursprünglichen Versuch, aber mehr pythonisch, ist es, Pythons Standardkonvention für die negative Indizierung zu verwenden, um vom Ende rückwärts zu zählen:

df[df.columns[-1]]

19

Dies sind einige Dinge, die Ihnen helfen, alles zu verstehen ... mit iloc

In iloc [Anfangszeile: Endzeile, Anfangsspalte: Endspalte]

Fall 1: Wenn Sie nur die letzte Spalte möchten --- df.iloc[:,-1] & df.iloc[:,-1:] bedeutet dies, dass Sie nur die letzte Spalte möchten ...

Fall 2: Wenn Sie alle Spalten und alle Zeilen außer der letzten Spalte df.iloc[:,:-1] möchten --- bedeutet dies, dass Sie alle Spalten und alle Zeilen außer der letzten Spalte möchten ...

Fall 3: Wenn Sie nur die letzte Zeile möchten --- df.iloc[-1:,:] & df.iloc[-1,:] bedeutet dies, dass Sie nur die letzte Zeile möchten ...

Fall 4: Wenn Sie alle Spalten und alle Zeilen außer der letzten Zeile df.iloc[:-1,:] möchten --- bedeutet dies, dass Sie alle Spalten und alle Zeilen außer der letzten Spalte möchten ...

Fall 5: Wenn Sie alle Spalten und alle Zeilen außer der letzten Zeile und der letzten Spalte df.iloc[:-1,:-1] möchten --- bedeutet dies, dass Sie alle Spalten und alle Zeilen außer der letzten Spalte und der letzten Zeile möchten ...


5

Die Frage ist: Wie wählt man die letzte Spalte eines Datenrahmens aus? Appart @piRSquared, keiner beantwortet die Frage.

Der einfachste Weg, einen Datenrahmen mit der letzten Spalte zu erhalten, ist:

df.iloc[ :, -1:]

2
df.T.iloc[-1]

df.T.tail(1)

pd.Series(df.values[:, -1], name=df.columns[-1])

1
Ich sehe keinen Wert darin, die Serie explizit aus der Numpy-Wertextraktion zu erstellen, verglichen mit einem direkten Aufruf von iloc
Boud

@Boud, es gibt viele Möglichkeiten, dies zu tun. Ich habe nur versucht, einen Haufen runterzuwerfen. Zugegeben, die dritte Option ist die schwächste.
piRSquared

1

Nur um @Anshul Singh Suryans Antwort hinzuzufügen:

Wenn wir den Datenrahmen teilen, um nur die letzte Spalte zu erhalten:

Wenn wir uns trennen wie:

y = df.iloc[:,-1:] - y bleibt ein dataframe

Allerdings, wenn wir uns gerne trennen

y = df.iloc[:,-1] - ywird ein Series.

Dies ist ein bemerkenswerter Unterschied, den ich bei beiden Ansätzen festgestellt habe. Wenn Sie sich nicht für den resultierenden Typ interessieren, können Sie einen der beiden verwenden. Andernfalls müssen Sie sich um die oben genannten Ergebnisse kümmern.

Dies gilt für eine beliebige Anzahl von Zeilen, die Sie extrahieren möchten, und nicht nur für die letzte Zeile. Wenn Sie beispielsweise die letzte nAnzahl von Zeilen eines Datenrahmens möchten, wobei n eine Ganzzahl ist, die kleiner oder gleich der Anzahl der im Datenrahmen vorhandenen Spalten ist, können Sie auf einfache Weise Folgendes tun:

y = df.iloc[:,n:]

Ersetzen Sie ndurch die Anzahl der gewünschten Spalten. Gleiches gilt auch für Zeilen.


0

Dies ist ein anderer Weg, dies zu tun. Ich denke vielleicht etwas allgemeiner:

df.ix[:,-1]

1
In diesem Fall wird Ihre Antwort nicht empfohlen, da in der Frage explizit nach der letzten Spalte gefragt wird, die auf dem Index basiert. ixmischt Label- und Index-Location-Accessor. Weitere Informationen finden Sie hier .
Pansen

4
In der Tat ist darüber hinaus ixmittlerweile veraltet.
Archie
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.