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.