Supprimer les trois premières lignes d'un dataframe dans pandas

177

Je dois supprimer les trois premières lignes d'un dataframe dans les pandas.

Je sais df.ix[:-1]que supprimerait la dernière ligne, mais je ne peux pas comprendre comment supprimer les n premières lignes.

Nilani Algiriyage
la source
Pour read_csv / read_html, vous pouvez utiliser par exemple un header=3argument de constructeur qui définira cette ligne comme ligne d'en-tête: stackoverflow.com/a/51822697/191246
ccpizza

Réponses:

263

Utilisez iloc:

df = df.iloc[3:]

vous donnera un nouveau df sans les trois premières lignes.

bdiamante
la source
1
cela ne supprime-t-il pas les 4 premières lignes au lieu des 3 premières lignes de la question d'origine?
tagoma
6
Non, ce n'est pas le cas. La position de départ de la tranche est toujours incluse.
bdiamante le
Quelqu'un sait comment faire cela dans un groupby()? Cela fonctionne mais renvoie des colonnes en double dans l'indexdf=pd.DataFrame({'v':np.arange(10).tolist()*2,'g':['a']*10+['b']*10});df.groupby('g').apply(lambda x: x.iloc[3:])
citynorman
Donc, si vous souhaitez supprimer de la ligne 3 à la ligne 9, par exemple, comment le feriez-vous? df=df.iloc[3:9]?
MK
1
@MK si vous utilisez cette approche, vous pouvez l'utiliser en combinaison avec pd.concat(). Quelque chose comme df2 = pd.concat([df.iloc[:3],df.iloc[10:]]).
bdiamante le
100

Je pense qu'une manière plus explicite de faire cela est d'utiliser drop.

La syntaxe est:

df.drop(label)

Et comme l'ont souligné @tim et @ChaimG, cela peut être fait sur place:

df.drop(label, inplace=True)

Une façon de mettre en œuvre cela pourrait être:

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

Et une autre utilisation "en place":

df.drop(df.head(3).index, inplace=True)
Drexiya
la source
5
droppeut même être calculé sur place (sans affectation supplémentaire). Plus rapide et plus simple!
tim
1
Pour développer l'idée de Tim, Exemple:df.drop(label, inplace=True)
ChaimG
En raison de l'index 0, je pense que la suggestion de mise en œuvre supprimera 4 lignes.
Daniel Morgan
1
@DanielMorgan Ce n'est pas le cas car les plages python sont à moitié ouvertes. Quant à savoir pourquoi c'est une autre question. Voir stackoverflow.com/questions/4504662/… ou quora.com/…
drexiya
2
@tim, d'après cela , les inplaceopérations ne sont pas plus rapides. Aussi, plus simple est une question d'opinion: je trouve que c'est plus facile à lire quand le code n'a pas de inplaceparamètres.
toto_tico
9
df = df.iloc[n:]

n supprime les n premières lignes.

176codage
la source
6

Vous pouvez utiliser le découpage en python, mais notez qu'il n'est pas en place.

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
barbe
la source
que signifie pas en place pandas?
cryanbhu
5
df.drop(df.index[[0,2]])

Pandas utilise une numérotation basée sur zéro, donc 0 est la première ligne, 1 est la deuxième ligne et 2 est la troisième ligne.

Anupam khare
la source
4

Un moyen simple consiste à utiliser tail (-n) pour supprimer les n premières lignes

df=df.tail(-3)

mxia
la source
0

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

ou si vous voulez faire dans un dataframe existant

faites simplement la commande suivante

Rahul kuchhadia
la source