Eliminar las primeras tres filas de un marco de datos en pandas

177

Necesito eliminar las primeras tres filas de un marco de datos en pandas.

df.ix[:-1]que eliminaría la última fila, pero no puedo entender cómo eliminar las primeras n filas.

Nilani Algiriyage
fuente
Para read_csv / read_html puede usar, por ejemplo, el header=3argumento del constructor que establecerá esa fila como la fila del encabezado: stackoverflow.com/a/51822697/191246
ccpizza

Respuestas:

263

Uso iloc:

df = df.iloc[3:]

le dará un nuevo df sin las primeras tres filas.

bdiamante
fuente
1
¿No elimina eso las primeras 4 filas en lugar de las primeras 3 filas de la pregunta original?
tagoma
66
No, no lo hace. La posición de inicio del corte siempre se incluye.
bdiamante
¿Alguien sabe cómo hacer esto en un groupby()? Esto funciona pero devuelve columnas duplicadas en el índicedf=pd.DataFrame({'v':np.arange(10).tolist()*2,'g':['a']*10+['b']*10});df.groupby('g').apply(lambda x: x.iloc[3:])
citynorman
Entonces, si desea eliminar de la fila 3 a la fila 9, por ejemplo, ¿cómo lo haría? df=df.iloc[3:9]?
MK
1
@MK si usa este enfoque, puede usar esto en combinación con pd.concat(). Algo así como df2 = pd.concat([df.iloc[:3],df.iloc[10:]]).
bdiamante
100

Creo que una forma más explícita de hacer esto es usar drop.

La sintaxis es:

df.drop(label)

Y como lo señalaron @tim y @ChaimG, esto se puede hacer en el lugar:

df.drop(label, inplace=True)

Una forma de implementar esto podría ser:

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

Y otro uso "en el lugar":

df.drop(df.head(3).index, inplace=True)
drexiya
fuente
55
dropincluso se puede calcular en el lugar (sin asignación adicional). ¡Más rápido y más simple!
tim
1
Para ampliar la idea de Tim, Ejemplo:df.drop(label, inplace=True)
ChaimG
Debido al índice 0, creo que la sugerencia de implementación eliminará 4 filas.
Daniel Morgan
1
@DanielMorgan Ese no es el caso, ya que los rangos de Python están medio abiertos. En cuanto a por qué es eso, es otra pregunta. Ver stackoverflow.com/questions/4504662/… o quora.com/…
drexiya
2
@tim, de acuerdo con esto , las inplaceoperaciones no son más rápidas. Además, lo más simple es una cuestión de opinión: me resulta más fácil de leer cuando el código no tiene inplaceparámetros.
toto_tico
9
df = df.iloc[n:]

n cae las primeras n filas.

176 codificación
fuente
6

Puede usar el corte en python, pero tenga en cuenta que no está en su lugar.

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
beardc
fuente
¿Qué no significa in situ pandas?
cryanbhu
5
df.drop(df.index[[0,2]])

Pandas usa numeración basada en cero, por lo que 0 es la primera fila, 1 es la segunda fila y 2 es la tercera fila.

Anupam khare
fuente
4

Una manera simple es usar tail (-n) para eliminar las primeras n filas

df=df.tail(-3)

mxia
fuente
0

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

o si quieres hacerlo en el marco de datos existente

simplemente haz el siguiente comando

Rahul kuchhadia
fuente