Elimina le prime tre righe di un frame di dati in Panda


177

Devo eliminare le prime tre righe di un frame di dati in Panda.

So df.ix[:-1]che rimuoverebbe l'ultima riga, ma non riesco a capire come rimuovere le prime n righe.


Per read_csv / read_html si può usare, ad esempio header=3costruttore argomento che impostare tale riga come riga di intestazione: stackoverflow.com/a/51822697/191246
ccpizza

Risposte:


263

Utilizzare iloc:

df = df.iloc[3:]

ti darà un nuovo df senza le prime tre righe.


1
ciò non rimuove le prime 4 righe anziché le prime 3 righe nella domanda originale?
tagoma,

6
No, non lo fa. La posizione iniziale della sezione è sempre inclusa.
bdiamante,

Qualcuno sa come farlo in un groupby()? Funziona ma restituisce colonne duplicate nell'indicedf=pd.DataFrame({'v':np.arange(10).tolist()*2,'g':['a']*10+['b']*10});df.groupby('g').apply(lambda x: x.iloc[3:])
citynorman,

Quindi, se si desidera eliminare dalla riga 3 alla riga 9, ad esempio, come lo si farebbe? df=df.iloc[3:9]?
MK,

1
@MK se si utilizza questo approccio, è possibile utilizzarlo in combinazione con pd.concat(). Qualcosa di simile, df2 = pd.concat([df.iloc[:3],df.iloc[10:]]).
bdiamante,

100

Penso che un modo più esplicito per farlo sia usare drop.

La sintassi è:

df.drop(label)

E come sottolineato da @tim e @ChaimG, questo può essere fatto sul posto:

df.drop(label, inplace=True)

Un modo per implementare questo potrebbe essere:

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

E un altro "sul posto" usa:

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

5
droppuò anche essere calcolato sul posto (senza assegnazione aggiuntiva). Più veloce e più semplice!
tim

1
Per espandere l'idea di Tim, Esempio:df.drop(label, inplace=True)
ChaimG,

A causa dell'indice 0, credo che il suggerimento di implementazione eliminerà 4 righe.
Daniel Morgan,

1
@DanielMorgan Non è così perché gli intervalli di Python sono aperti a metà. Quanto al perché, è un'altra domanda. Vedere stackoverflow.com/questions/4504662/... o quora.com/...
drexiya

2
@tim, secondo questo , le inplaceoperazioni non sono più veloci. Inoltre, è più semplice una questione di opinione: trovo più facile da leggere quando il codice non ha inplaceparametri.
toto_tico,


6

Puoi utilizzare Python slicing, ma nota che non è a posto.

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

cosa non significa sul posto pandas?
cryanbhu,

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

Panda usa una numerazione basata su zero, quindi 0 è la prima riga, 1 è la seconda riga e 2 è la terza riga.


4

Un modo semplice è usare tail (-n) per rimuovere le prime n righe

df=df.tail(-3)


0

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

o se vuoi farlo nel dataframe esistente

fai semplicemente il seguente comando

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.