Respuestas:
Yo usaría iloc
, que toma un segmento de fila / columna, ambos basados en la posición del número entero y siguiendo la sintaxis normal de Python.
df.iloc[::5, :]
df.iloc[::5]
Aunque la respuesta aceptada de @ chrisb responde la pregunta, me gustaría agregarle lo siguiente.
Un método simple que utilizo para obtener los nth
datos o eliminar la nth
fila es el siguiente:
df1 = df[df.index % 3 != 0] # Excludes every 3rd row starting from 0
df2 = df[df.index % 3 == 0] # Selects every 3rd raw starting from 0
Este muestreo basado en aritmética tiene la capacidad de permitir selecciones de filas aún más complejas.
Esto supone , por supuesto, que tiene una index
columna de enteros ordenados y consecutivos que comienzan en 0.
Existe una solución aún más simple para la respuesta aceptada que implica invocar directamente df.__getitem__
.
df = pd.DataFrame('x', index=range(5), columns=list('abc'))
df
a b c
0 x x x
1 x x x
2 x x x
3 x x x
4 x x x
Por ejemplo, para obtener cada 2 filas, puede hacer
df[::2]
a b c
0 x x x
2 x x x
4 x x x
También hay GroupBy.first
/ GroupBy.head
, agrupa en el índice:
df.index // 2
# Int64Index([0, 0, 1, 1, 2], dtype='int64')
df.groupby(df.index // 2).first()
# Alternatively,
# df.groupby(df.index // 2).head(1)
a b c
0 x x x
1 x x x
2 x x x
El índice se divide en el piso por la zancada (2, en este caso). Si el índice no es numérico, haga
# df.groupby(np.arange(len(df)) // 2).first()
df.groupby(pd.RangeIndex(len(df)) // 2).first()
a b c
0 x x x
1 x x x
2 x x x
df.iloc[1::5, :]
.