Usuń pierwsze trzy wiersze ramki danych w pandach

177

Muszę usunąć pierwsze trzy wiersze ramki danych w pandach.

Wiem, df.ix[:-1]że usunąłbym ostatni wiersz, ale nie wiem, jak usunąć pierwsze n wierszy.

Nilani Algiriyage
źródło
Dla read_csv / read_html możesz użyć np. header=3Argumentu konstruktora, który ustawi ten wiersz jako wiersz nagłówka: stackoverflow.com/a/51822697/191246
ccpizza

Odpowiedzi:

263

Zastosowanie iloc:

df = df.iloc[3:]

da ci nowy df bez pierwszych trzech rzędów.

bdiamante
źródło
1
czy to nie usuwa pierwszych 4 wierszy zamiast pierwszych 3 wierszy z pierwotnego pytania?
tagoma
6
Nie, nie ma. Zawsze uwzględniana jest pozycja początkowa wycinka.
bdiamante
Czy ktoś wie, jak to zrobić w groupby()? To działa, ale zwraca zduplikowane kolumny w indeksiedf=pd.DataFrame({'v':np.arange(10).tolist()*2,'g':['a']*10+['b']*10});df.groupby('g').apply(lambda x: x.iloc[3:])
citynorman
Więc jeśli chcesz usunąć na przykład wiersz od 3 do 9, jak byś to zrobił? df=df.iloc[3:9]?
MK
1
@MK, jeśli używasz tego podejścia, możesz go używać w połączeniu z pd.concat(). Coś w rodzaju df2 = pd.concat([df.iloc[:3],df.iloc[10:]]).
bdiamante
100

Myślę, że bardziej wyraźnym sposobem na to jest użycie drop.

Składnia jest następująca:

df.drop(label)

Jak wskazali @tim i @ChaimG, można to zrobić na miejscu:

df.drop(label, inplace=True)

Jednym ze sposobów realizacji tego może być:

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

I inne zastosowanie „na miejscu”:

df.drop(df.head(3).index, inplace=True)
drexiya
źródło
5
dropmożna nawet obliczyć na miejscu (bez dodatkowego przypisania). Szybciej i prościej!
tim
1
Aby rozwinąć pomysł Tima, przykład:df.drop(label, inplace=True)
ChaimG
Ze względu na indeks 0 uważam, że sugestia implementacji usunie 4 wiersze.
Daniel Morgan
1
@DanielMorgan Tak nie jest, ponieważ zakresy Pythona są w połowie otwarte. Dlaczego tak jest, to inna kwestia. Zobacz stackoverflow.com/questions/4504662/… lub quora.com/…
drexiya
2
@tim, zgodnie z tym , inplaceoperacje nie są szybsze. Poza tym prostsza jest kwestia opinii: łatwiej mi się czyta, gdy kod nie ma inplaceparametrów.
toto_tico
9
df = df.iloc[n:]

n opuszcza pierwsze n wierszy.

176kodowanie
źródło
6

Możesz użyć krojenia Pythona, ale pamiętaj, że nie jest to na miejscu.

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
beardc
źródło
co nie oznacza w miejscu pandas?
cryanbhu
5
df.drop(df.index[[0,2]])

Pandy używają numeracji od zera, więc 0 to pierwszy wiersz, 1 to drugi rząd, a 2 to trzeci wiersz.

Anupam khare
źródło
4

Prostym sposobem jest użycie tail (-n) do usunięcia pierwszych n wierszy

df=df.tail(-3)

mxia
źródło
0

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

lub jeśli chcesz to zrobić w istniejącej ramce danych

po prostu wykonaj następujące polecenie

Rahul kuchhadia
źródło