Antworten:
Ich würde verwenden iloc
, das ein Zeilen- / Spalten-Slice benötigt, sowohl basierend auf der Ganzzahlposition als auch nach der normalen Python-Syntax.
df.iloc[::5, :]
df.iloc[::5]
Obwohl die akzeptierte Antwort von @ chrisb die Frage beantwortet, möchte ich Folgendes hinzufügen.
Eine einfache Methode, mit der ich die nth
Daten abrufe oder die nth
Zeile lösche, ist die folgende:
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
Diese arithmetische Abtastung bietet die Möglichkeit, noch komplexere Zeilenauswahlen zu ermöglichen.
Dies setzt natürlich voraus , dass Sie eine index
Spalte geordneter, aufeinanderfolgender Ganzzahlen haben, die bei 0 beginnen.
Es gibt eine noch einfachere Lösung für die akzeptierte Antwort, bei der direkt aufgerufen wird 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
Um beispielsweise alle 2 Zeilen zu erhalten, können Sie dies tun
df[::2]
a b c
0 x x x
2 x x x
4 x x x
Es gibt auch GroupBy.first
/ GroupBy.head
, Sie gruppieren im 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
Der Index wird durch den Schritt (in diesem Fall 2) durch den Boden geteilt. Wenn der Index nicht numerisch ist, tun Sie dies stattdessen
# 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, :]
.