Попробуйте следующее рекурсивное решение:
# solution
def save_file_part(df, size_threshold, save_path, part_number=0):
file_size = df.memory_usage(index=True, deep=False).sum() / 1038336
num_records = len(df)
if file_size > size_threshold:
records_to_split_off = int(num_records * size_threshold // file_size)
df_to_save = df.head(records_to_split_off)
df_to_save.to_csv(save_path.format(part_number),sep=',', index=False, na_rep='NA')
save_file_part(df.tail(num_records-records_to_split_off), size_threshold, save_path, part_number=part_number+1)
else:
df.to_csv(save_path.format(part_number), sep=',', index=False, na_rep='NA')
# example
dates = pd.date_range('20130101',periods=60000)
df = pd.DataFrame(np.random.randn(60000,4),index=dates,columns=list('ABCD'))
file_size = df.memory_usage(index=True, deep=False).sum() / 1038336
print(file_size)
save_file_part(df, 0.5, save_path="c:/tmp/my_df_{}.csv") # note, the function expects "save_path" as a string with at least one "{}" placeholder
df.memory_usage сообщает вам, насколько большой пандан DataFrame находится в памяти. При сохранении CSV размер будет отличаться (будет больше), поэтому вы можете установить size_threshold
на 15 Мб. Вы можете определить подходящий размер с помощью скрипта, но вы можете просто немного поэкспериментировать, чтобы найти правильный рацион