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.
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.
Risposte:
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:])
df=df.iloc[3:9]
?
pd.concat()
. Qualcosa di simile, df2 = pd.concat([df.iloc[:3],df.iloc[10:]])
.
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)
drop
può anche essere calcolato sul posto (senza assegnazione aggiuntiva). Più veloce e più semplice!
df.drop(label, inplace=True)
inplace
operazioni non sono più veloci. Inoltre, è più semplice una questione di opinione: trovo più facile da leggere quando il codice non ha inplace
parametri.
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
pandas
?
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.
inp0 = pd.read_csv ("bank_marketing_updated_v1.csv", skiprows = 2)
o se vuoi farlo nel dataframe esistente
fai semplicemente il seguente comando
header=3
costruttore argomento che impostare tale riga come riga di intestazione: stackoverflow.com/a/51822697/191246