Ich habe versucht, negative Indizes zu verwenden, aber das führte auch zu Fehlern. Ich muss immer noch etwas grundlegendes missverstehen.
DF = DF[:-1]?
– U2EF1
14. November 2014 um 1:55 Uhr
@U2EF1 kopiert den gesamten Datensatz, oder? Beim Umgang mit großen Datenmengen kann dies ein Problem darstellen.
– ManuelSchneid3r
17. Dezember 2019 um 18:50 Uhr
Wenn last_row die Länge von DF hat, müssen Sie (last_row-1) für die Indizierung verwenden.
– Anoyz
17. Juli 2021 um 18:31 Uhr
Es ist eine gute Übung, es zu verwenden df.shape[0] statt len(df) um die Anzahl der Zeilen zu erhalten.
– pabz
12. August 2021 um 14:27 Uhr
Warum ist das eine gute Praxis @pabz?
– Tawin
6. Juni um 22:22 Uhr
Kane kauen
So löschen Sie die letzten n Zeilen:
df.drop(df.tail(n).index,inplace=True) # drop last n rows
Auf die gleiche Weise können Sie die ersten n Zeilen löschen:
df.drop(df.head(n).index,inplace=True) # drop first n rows
Um die letzte Spalte zu löschen, können Sie df.drop(df.columns[-1]axis=1, inplace=True) oder, wenn Sie den Namen der Spalte kennen, können Sie df.drop(columns=[‘col_name’]inplace=True) – wenn Sie nicht möchten, dass es an Ort und Stelle ausgeführt wird, weisen Sie es einer neuen Variablen zu und entfernen Sie dieses Argument.
– Shawn Schreier
24. April 2020 um 18:24 Uhr
Diese Methode funktioniert nur, wenn der Index der letzten Zeile eindeutig ist, da sie alle Zeilen entfernt, die denselben Index wie die letzten n Zeilen haben. Die Antwort von @blue-sky scheint angemessener zu sein
– Bernhard
5. Januar 2021 um 5:32 Uhr
DF[:-n]
wobei n die letzte Anzahl der zu löschenden Zeilen ist.
So löschen Sie die letzte Zeile:
DF = DF[:-1]
Das funktioniert, aber ich vermute, Wes McKinney würde es nicht gefallen. Warum nicht das in Pandas eingebaute Zeug verwenden?
– pabz
12. August 2021 um 14:32 Uhr
Vielleicht veraltet, weil ich einen Fehler erhalten habe, es wurde nach einer Spalte mit dem Namen gesucht -1. Musste verwenden df = df.iloc[:-1]
– Ssayan
15. Februar um 9:56 Uhr
Nach meinen Tests ist dies mindestens 6-mal schneller als die Verwendung .drop()!
– Daniel Goldfarb
21. Juni um 20:10 Uhr
Erstellt dies eine Ansicht oder eine Kopie? Erklärt möglicherweise den Geschwindigkeitsunterschied, wenn es eine Aussicht ist.
– Philip Couling
Vor 2 Tagen
Da die Indexpositionierung in Python 0-basiert ist, gibt es eigentlich kein Element in index an der entsprechenden Stelle len(DF). Das brauchst du last_row = len(DF) - 1:
In [49]: dfrm
Out[49]:
A B C
0 0.120064 0.785538 0.465853
1 0.431655 0.436866 0.640136
2 0.445904 0.311565 0.934073
3 0.981609 0.695210 0.911697
4 0.008632 0.629269 0.226454
5 0.577577 0.467475 0.510031
6 0.580909 0.232846 0.271254
7 0.696596 0.362825 0.556433
8 0.738912 0.932779 0.029723
9 0.834706 0.002989 0.333436
[10 rows x 3 columns]
In [50]: dfrm.drop(dfrm.index[len(dfrm)-1])
Out[50]:
A B C
0 0.120064 0.785538 0.465853
1 0.431655 0.436866 0.640136
2 0.445904 0.311565 0.934073
3 0.981609 0.695210 0.911697
4 0.008632 0.629269 0.226454
5 0.577577 0.467475 0.510031
6 0.580909 0.232846 0.271254
7 0.696596 0.362825 0.556433
8 0.738912 0.932779 0.029723
[9 rows x 3 columns]
Es ist jedoch viel einfacher, einfach zu schreiben DF[:-1].
Beachten Sie, dass beim Löschen mit dfrm.index der Index der letzten Zeile eindeutig sein sollte, andernfalls werden alle Zeilen mit diesem Index gelöscht.
– FranciscoD
28. Oktober 2017 um 22:13 Uhr
Verstehe ich richtig, dass Sie mit drop (inplace=True) das vorhandene df ändern, während Sie df verwenden[:-1] Sie erhalten eine Ansicht von Daten, was später zu SettingWithCopyWarning führen kann?
– Philipp
5. November 2019 um 8:17 Uhr
Überrascht, dass niemand das erwähnt hat:
# To remove last n rows
df.head(-n)
# To remove first n rows
df.tail(-n)
Das Ausführen eines Geschwindigkeitstests auf einem DataFrame mit 1000 Zeilen zeigt, dass Slicing und head/tail sind ~6 mal schneller als die Verwendung drop:
>>> %timeit df[:-1]
125 µs ± 132 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
>>> %timeit df.head(-1)
129 µs ± 1.18 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
>>> %timeit df.drop(df.tail(1).index)
751 µs ± 20.4 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
Peter Baumwolle
Verwenden Sie einfach die Indizierung
df.iloc[:-1,:]
Deshalb gibt es iloc. Sie können auch Kopf oder Schwanz verwenden.
Erwägen Sie, Ihre Antwort zu erweitern und zu erklären, wie und warum Ihre Lösung funktioniert
– Marsroverr
19. November 2020 um 19:09 Uhr
Nir Friedman
Die schönste Lösung, die ich gefunden habe, die nicht (unbedingt?) Eine vollständige Kopie erstellt, ist
df.drop(df.index[-1], inplace=True)
Natürlich können Sie inplace=True einfach weglassen, um einen neuen Datenrahmen zu erstellen, und Sie können auch einfach die letzten N Zeilen löschen, indem Sie einfach Teile von df.index (df.index[-N:] um die letzten N Zeilen zu löschen). Dieser Ansatz ist also nicht nur prägnant, sondern auch sehr flexibel.
Erwägen Sie, Ihre Antwort zu erweitern und zu erklären, wie und warum Ihre Lösung funktioniert
DF = DF[:-1]
?– U2EF1
14. November 2014 um 1:55 Uhr
@U2EF1 kopiert den gesamten Datensatz, oder? Beim Umgang mit großen Datenmengen kann dies ein Problem darstellen.
– ManuelSchneid3r
17. Dezember 2019 um 18:50 Uhr
Wenn last_row die Länge von DF hat, müssen Sie (last_row-1) für die Indizierung verwenden.
– Anoyz
17. Juli 2021 um 18:31 Uhr
Es ist eine gute Übung, es zu verwenden
df.shape[0]
stattlen(df)
um die Anzahl der Zeilen zu erhalten.– pabz
12. August 2021 um 14:27 Uhr
Warum ist das eine gute Praxis @pabz?
– Tawin
6. Juni um 22:22 Uhr