Respostas:
Eu usaria iloc
, o que leva uma fatia de linha / coluna, com base na posição do inteiro e seguindo a sintaxe normal do Python.
df.iloc[::5, :]
df.iloc[::5]
Embora a resposta aceita de @chrisb responda à pergunta, eu gostaria de acrescentar o seguinte.
Um método simples que uso para obter os nth
dados ou eliminar a nth
linha é o seguinte:
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
Esta amostragem baseada em aritmética tem a capacidade de permitir seleções de linhas ainda mais complexas.
Isso pressupõe , é claro, que você tenha uma index
coluna de inteiros ordenados e consecutivos começando em 0.
Existe uma solução ainda mais simples para a resposta aceita que envolve invocar diretamente 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 exemplo, para obter a cada 2 linhas, você pode fazer
df[::2]
a b c
0 x x x
2 x x x
4 x x x
Há também GroupBy.first
/ GroupBy.head
, você agrupa no í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
O índice é dividido no solo pela passada (2, neste caso). Se o índice não for numérico, faça
# 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, :]
.