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?

Nate
quelle

Antworten:

134

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

df.iloc[:,-1:]
Boud
quelle
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]]
jez
quelle
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 ...

Anshul Singh Suryan
quelle
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:]
Alex
quelle
2
df.T.iloc[-1]

df.T.tail(1)

pd.Series(df.values[:, -1], name=df.columns[-1])
piRSquared
quelle
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.

Amit Sharma
quelle
0

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

df.ix[:,-1]
user28929304981
quelle
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