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.

Nilani Algiriyage
quelle
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.

bdiamante
quelle
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)
drexiya
quelle
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
9
df = df.iloc[n:]

n löscht die ersten n Zeilen.

Codierung
quelle
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
Bart
quelle
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.

Anupam Khare
quelle
4

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

df=df.tail(-3)

mxia
quelle
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

Rahul Kuchhadia
quelle