Разделение кадра данных в относительно четные фрагменты по длине

Мне нужно создать функцию, которая разбивала бы предоставленный dataframe на куски нужного размера. Например, если dataframe содержит 1111 строк, я хочу иметь возможность указать размер блока 400 строк и получить три меньших кадра данных с размерами 400, 400 и 311. Есть ли удобная функция для выполнения задания? Каким будет лучший способ хранить и перебирать фрагментированный фрагмент данных?

Пример DataFrame

import numpy as np
import pandas as pd

test = pd.concat([pd.Series(np.random.rand(1111)), pd.Series(np.random.rand(1111))], axis = 1)

Ответ 1

Вы можете использовать .groupby, как показано ниже.

for g, df in test.groupby(np.arange(len(test)) // 400):
    print(df.shape)
# (400, 2)
# (400, 2)
# (311, 2)

Ответ 2

Более питонический способ разбить большие кадры данных на более мелкие порции на основе фиксированного числа строк - это использовать понимание списка:

n = 400  #chunk row size
list_df = [test[i:i+n] for i in range(0,test.shape[0],n)]

[i.shape for i in list_df]

Выход:

[(400, 2), (400, 2), (311, 2)]