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.


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.


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)

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


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

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.


4

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

df=df.tail(-3)


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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.