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.


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.