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.

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


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.


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)

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


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

¿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.


4

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

df=df.tail(-3)


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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.