Відповіді:
Я б використовував iloc
, що приймає фрагмент рядка / стовпця, як на основі цілочисельної позиції, так і після нормального синтаксису python.
df.iloc[::5, :]
df.iloc[::5]
Хоча прийнята відповідь @ chrisb відповідає на питання, я хотів би додати до неї наступне.
Простий метод, який я використовую для отримання nth
даних або скидання nth
рядка, такий:
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
Ця вибірка на основі арифметики має можливість уможливити ще більш складний вибір рядків.
Це передбачає , звичайно, що у вас є index
стовпець упорядкованих послідовних, цілі числа , починаючи з 0.
Існує ще більш просте рішення прийнятої відповіді, яке передбачає безпосереднє посилання 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
Наприклад, щоб отримати кожні 2 рядки, ви можете це зробити
df[::2]
a b c
0 x x x
2 x x x
4 x x x
Є також GroupBy.first
/ GroupBy.head
, ви групуєтесь за індексом:
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
Покажчик розміщений підлогою за допомогою кроку (2, у даному випадку). Якщо індекс не числовий, замість цього виконайте
# 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, :]
.