So löschen Sie die letzte Datenzeile eines Pandas-Datenrahmens

Lesezeit: 4 Minuten

Benutzeravatar von tumultous_rooster
turbulenter_hahn

Ich denke, das sollte einfach sein, aber ich habe ein paar Ideen ausprobiert und keine davon hat funktioniert:

last_row = len(DF)
DF = DF.drop(DF.index[last_row])  #<-- fail!

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

Benutzeravatar von Kane Chew
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)

Benutzeravatar von Peter Cotton
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

Benutzeravatar von Nir Friedman
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

    – Marsroverr

    19. November 2020 um 19:09 Uhr

Benutzeravatar von MK
MK

stats = pd.read_csv("C:\\py\\programs\\second pandas\\ex.csv")

Die Ausgabe von Statistiken:

       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

benutz einfach skipfooter=1

skipfooter : int, Standard 0

Anzahl der zu überspringenden Zeilen am Ende der Datei

stats_2 = pd.read_csv("C:\\py\\programs\\second pandas\\ex.csv", skipfooter=1, engine="python")

Ausgabe von stats_2

       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

1430360cookie-checkSo löschen Sie die letzte Datenzeile eines Pandas-Datenrahmens

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy