Réponses:
J'utiliserais iloc
, qui prend une tranche de ligne / colonne, à la fois basée sur la position entière et suivant la syntaxe Python normale.
df.iloc[::5, :]
df.iloc[::5]
Bien que la réponse acceptée par @ chrisb réponde à la question, j'aimerais y ajouter ce qui suit.
Une méthode simple que j'utilise pour obtenir les nth
données ou supprimer la nth
ligne est la suivante:
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
Cet échantillonnage basé sur l'arithmétique a la capacité de permettre des sélections de lignes encore plus complexes.
Cela suppose , bien sûr, que vous ayez une index
colonne d' entiers ordonnés, consécutifs, commençant à 0.
Il existe une solution encore plus simple à la réponse acceptée qui implique l'invocation directe 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
Par exemple, pour obtenir toutes les 2 lignes, vous pouvez faire
df[::2]
a b c
0 x x x
2 x x x
4 x x x
Il y a aussi GroupBy.first
/ GroupBy.head
, vous groupez sur l'index:
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
L'indice est divisé par le sol par la foulée (2, dans ce cas). Si l'index n'est pas numérique, faites plutôt
# 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, :]
.