Равномерное разделение фрейма данных на множество меньших фреймов данных - PullRequest
0 голосов
/ 16 июня 2020

У меня есть следующий фрейм с именем 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.

У кого-нибудь есть идеи, как я могу достичь того, что хочу ?

1 Ответ

1 голос
/ 16 июня 2020

Используйте, np.array_split, в документации говорится:

Для массива длиной l, который должен быть разделен на n разделов, он возвращает l % n подмассивы размером l//n + 1 и остальные размером l//n.:

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