Dividir el dataframe en partes relativamente uniformes de acuerdo con la longitud

Tengo que crear una función que dividiría el dataframe proporcionado en trozos del tamaño necesario. Por ejemplo, si el dataframe contiene 1111 filas, quiero poder especificar el tamaño de trozo de 400 filas y obtener tres marcos de datos más pequeños con tamaños de 400, 400 y 311. ¿Hay alguna función conveniente para hacer el trabajo? ¿Cuál sería la mejor manera de almacenar e iterar en un dataframe segmentado?

Ejemplo de 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) 

Puedes usar .groupby como se muestra abajo.

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

Una forma más pirónica de dividir grandes marcos de datos en fragmentos más pequeños en función de un número fijo de filas es usar la comprensión de la lista:

 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] 

Salida:

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