Exclua as três primeiras linhas de um quadro de dados nos pandas

177

Preciso excluir as três primeiras linhas de um quadro de dados nos pandas.

Eu sei df.ix[:-1]que removeria a última linha, mas não consigo descobrir como remover as primeiras n linhas.

Nilani Algiriyage
fonte
Para read_csv / read_html, você pode usar, por exemplo, o header=3argumento construtor que definirá essa linha como a linha do cabeçalho: stackoverflow.com/a/51822697/191246
ccpizza

Respostas:

261

Use iloc:

df = df.iloc[3:]

lhe dará um novo df sem as três primeiras linhas.

bdiamante
fonte
1
isso não remove as 4 primeiras linhas em vez das 3 primeiras na pergunta original?
Tagoma
6
Não, não faz. A posição inicial da fatia é sempre incluída.
Bdiamante
Alguém sabe como fazer isso em um groupby()? Isso funciona, mas retorna colunas duplicadas no índicedf=pd.DataFrame({'v':np.arange(10).tolist()*2,'g':['a']*10+['b']*10});df.groupby('g').apply(lambda x: x.iloc[3:])
citynorman
Então, se você deseja excluir da linha 3 para a linha 9, por exemplo, como você faria isso? df=df.iloc[3:9]?
MK
1
@MK se estiver usando essa abordagem, poderá usá-la em combinação com pd.concat(). Algo como df2 = pd.concat([df.iloc[:3],df.iloc[10:]]).
bdiamante 26/06/19
100

Eu acho que uma maneira mais explícita de fazer isso é usar drop.

A sintaxe é:

df.drop(label)

E, como apontado por @tim e @ChaimG, isso pode ser feito no local:

df.drop(label, inplace=True)

Uma maneira de implementar isso pode ser:

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

E outro uso "no local":

df.drop(df.head(3).index, inplace=True)
drexiya
fonte
5
droppode até ser calculado no local (sem atribuição extra). Mais rápido e mais simples!
tim
1
Para expandir a ideia de Tim, Exemplo:df.drop(label, inplace=True)
ChaimG
Devido ao índice 0, acredito que a sugestão de implementação excluirá 4 linhas.
Daniel Morgan
1
@DanielMorgan Esse não é o caso, pois os intervalos de python estão meio abertos. Quanto ao porquê disso, é outra questão. Veja stackoverflow.com/questions/4504662/... ou quora.com/...
drexiya
2
@tim, de acordo com isso , as inplaceoperações não são mais rápidas. Além disso, é mais simples uma questão de opinião: acho mais fácil ler quando o código não possui inplaceparâmetros.
toto_tico
9
df = df.iloc[n:]

n descarta as primeiras n linhas.

176coding
fonte
6

Você pode usar o python slicing, mas observe que ele não está no local.

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
barba
fonte
o que não significa no local pandas?
cryanbhu
5
df.drop(df.index[[0,2]])

O Pandas usa numeração baseada em zero, então 0 é a primeira linha, 1 é a segunda linha e 2 é a terceira linha.

Anupam khare
fonte
4

Uma maneira simples é usar tail (-n) para remover as primeiras n linhas

df=df.tail(-3)

mxia
fonte
0

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

ou se você quiser fazer no quadro de dados existente

basta fazer o seguinte comando

Rahul kuchhadia
fonte