Löschen Sie die ersten drei Zeilen eines Datenrahmens in Pandas


177

Ich muss die ersten drei Zeilen eines Datenrahmens in Pandas löschen.

Ich weiß df.ix[:-1], dass die letzte Zeile entfernt werden würde, aber ich kann nicht herausfinden, wie die ersten n Zeilen entfernt werden.


Für read_csv / read_html können Sie zB ein header=3Konstruktorargument verwenden, das diese Zeile als Kopfzeile festlegt
— ccpizza

Antworten:


261

Verwendung iloc:

df = df.iloc[3:]

gibt dir einen neuen df ohne die ersten drei zeilen.


1
Entfernt das nicht die ersten 4 Zeilen anstelle der ersten 3 Zeilen in der ursprünglichen Frage?
— Tagoma

6
Nein, das tut es nicht. Die Startposition des Slice ist immer enthalten.
— Bdiamante

Weiß jemand zufällig, wie man das in einem macht groupby()? Dies funktioniert, gibt aber doppelte Spalten im Index zurückdf=pd.DataFrame({'v':np.arange(10).tolist()*2,'g':['a']*10+['b']*10});df.groupby('g').apply(lambda x: x.iloc[3:])
— citynorman

Wenn Sie beispielsweise von Zeile 3 bis Zeile 9 löschen möchten, wie würden Sie dies tun? df=df.iloc[3:9]?
— MK

1
@MK Wenn Sie diesen Ansatz verwenden, können Sie dies in Kombination mit verwenden pd.concat(). So etwas wie , df2 = pd.concat([df.iloc[:3],df.iloc[10:]]).
— Bdiamante

100

Ich denke, ein expliziterer Weg, dies zu tun, ist die Verwendung von drop.

Die Syntax lautet:

df.drop(label)

Und wie von @tim und @ChaimG hervorgehoben, kann dies vor Ort erfolgen:

df.drop(label, inplace=True)

Eine Möglichkeit, dies umzusetzen, könnte sein:

df.drop(df.index[:3], inplace=True)

Und noch eine "an Ort und Stelle" Verwendung:

df.drop(df.head(3).index, inplace=True)

5
dropkann sogar vor Ort berechnet werden (ohne zusätzliche Zuordnung). Schneller und einfacher!
— Tim

1
Um Tims Idee zu erweitern, Beispiel:df.drop(label, inplace=True)
— ChaimG

Aufgrund des Index 0 glaube ich, dass der Implementierungsvorschlag 4 Zeilen löschen wird.
— Daniel Morgan

1
@DanielMorgan Dies ist nicht der Fall, da Python-Bereiche halb offen sind. Warum das so ist, ist eine andere Frage. Siehe stackoverflow.com/questions/4504662/… oder quora.com/…
— drexiya

2
@ Tim, nach dieser , inplaceOperationen sind nicht schneller. Einfacher ist auch Ansichtssache: Ich finde es einfacher zu lesen, wenn der Code keine inplaceParameter hat.
— toto_tico


6

Sie können Python-Slicing verwenden, beachten Sie jedoch, dass es nicht vorhanden ist.

In [15]: import pandas as pd
In [16]: import numpy as np
In [17]: df = pd.DataFrame(np.random.random((5,2)))
In [18]: df
Out[18]:
          0         1
0  0.294077  0.229471
1  0.949007  0.790340
2  0.039961  0.720277
3  0.401468  0.803777
4  0.539951  0.763267

In [19]: df[3:]
Out[19]:
          0         1
3  0.401468  0.803777
4  0.539951  0.763267

Was bedeutet nicht an Ort und Stelle pandas?
— Cryanbhu

5
df.drop(df.index[[0,2]])

Pandas verwendet eine auf Null basierende Nummerierung, also ist 0 die erste Zeile, 1 die zweite Zeile und 2 die dritte Zeile.


4

Eine einfache Möglichkeit besteht darin, mit tail (-n) die ersten n Zeilen zu entfernen

df=df.tail(-3)


0

inp0 = pd.read_csv ("bank_marketing_updated_v1.csv", skiprows = 2)

oder wenn Sie in vorhandenen Datenrahmen tun möchten

Führen Sie einfach den folgenden Befehl aus

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.