将数据帧均匀地分成许多较小的数据帧

Splitting a dataframe into many smaller data frames evenly-ish

我有以下称为 df 的框架,它有 65 个项目。

   Name  Data
0  Name1 Data1
1  Name2 Data2
2  Name3 Data3
....

我想把它尽可能均匀地分成30个数据帧。

所以长度为 65,我希望有 5 个长度为 3 的帧和 25 个长度为 2 的帧(加起来为 65)

我使用以下函数:

def chunk(seq, size):
    return (seq[pos:pos + size] for pos in range(0, len(seq), size))

n = 30 #number of files

length = len(df)

counter=0

for df_chunk in chunk(frame, int(length / n) + (length % n > 0)):
    counter+=1
    df_chunk.to_csv(f"path/to/file{counter}.csv")

但我只得到 21 个长度为 3 的文件和 1 个长度为 2 的文件,而不是 5 个长度为 3 的文件和 25 个长度为 2 的文件。

有人对我如何实现我想要的有任何想法吗?

使用,np.array_split,文档中说:

For an array of length l that should be split into n sections, it returns l % n sub-arrays of size l//n + 1 and the rest of size l//n.:

for counter, df_chunk in enumerate(np.array_split(df, 30), 1):
    df_chunk.to_csv(f"path/to/file{counter}.csv")