Python 如何在Colab中将一个较长的DEAP日志(10 MM)转换为数据帧时修复RAM限制?

Python 如何在Colab中将一个较长的DEAP日志(10 MM)转换为数据帧时修复RAM限制?,python,pandas,dataframe,deap,Python,Pandas,Dataframe,Deap,当我把一个DEAP的日志(本质上是一个字典列表)和大约10毫米的条目转换成一个数据帧进行进一步处理时,我得到了一条关于GoogleColab内存溢出的消息 我正在使用DEAP软件包做一些实验,因为我的机器又慢又旧,我一直在用谷歌的Colab服务自助。 模拟的结果是DEAP的日志,这是一个字典列表。每个字典都是模拟屏幕截图的重要值的摘要。 我一直在将这个字典列表转换为数据帧进行分析,但对于最大的模拟,进程崩溃是因为它超过了分配的RAM 字典存储此类值: logbook[-1] {'avg': 16

当我把一个DEAP的日志(本质上是一个字典列表)和大约10毫米的条目转换成一个数据帧进行进一步处理时,我得到了一条关于GoogleColab内存溢出的消息

我正在使用DEAP软件包做一些实验,因为我的机器又慢又旧,我一直在用谷歌的Colab服务自助。 模拟的结果是DEAP的日志,这是一个字典列表。每个字典都是模拟屏幕截图的重要值的摘要。 我一直在将这个字典列表转换为数据帧进行分析,但对于最大的模拟,进程崩溃是因为它超过了分配的RAM

字典存储此类值:

logbook[-1]
{'avg': 16.72180244532359,
 'b_ratio': 5,
 'best': 0.006420736818512296,
 'births': 80160,
 'cx_pb': 0.9,
 'exp': 128,
 'k_par': 6,
 'k_sur': 6,
 'med': 2.6377157552245727,
 'mut_pb': 0.9,
 'mut_sig': 7.5,
 'pop': 160,
 'rep': 40,
 'seed': 112,
 'std': 20.059567935625164,
 'worst': 55.23488779660829}
我感兴趣的是将日志存储为熊猫数据帧,日志长度在10毫米到12毫米之间。稍后,我将把这个数字减少到大约五分之一

在酸洗和拆开日志后,我看到我使用的是分配的12.7GB中的大约7.7GB

我试过:

from itertools import chain
fitness_res = pd.DataFrame(list(chain.from_iterable(logbook)))

没有成功

我得到的错误是:

Your session crashed after using all available RAM. View runtime logs

我希望有一个包含DEAP日志中所有数据的数据框。

中的数据框将所有数据加载到内存中。您使用的方法是在将数据传递到
pandas
以存储在数据帧中之前,使用额外的内存加载数据;e、 g

from itertools import chain
fitness_res = pd.DataFrame(list(chain.from_iterable(logbook)))
这意味着在将数据传递到
pd.DataFrame
之前,您正在创建所有读取值的列表

鉴于第二种方法:

pop_records = [record for record in logbook]
fitness_res = pd.DataFrame(pop_records)
您正在使用列表理解创建一个列表,该列表在将所有数据传递到
pandas
之前再次将其加载到内存中

我的建议是,您可以使用以下方法直接在pickle文件上使用pandas数据加载功能:


我正在测试它。谢谢你指出我的主要错误!我假设如果这不起作用,我需要用一个更稀疏的数据采集器重新运行模拟。是的,或者使用pickle存储以外的其他方法,并分块处理数据,以限制任何时候的内存消耗。您好。成功了!我不知道一个人能不能把一份字典的清单直接传给熊猫。谢谢
pop_records = [record for record in logbook]
fitness_res = pd.DataFrame(pop_records)
fitness_res = pd.read_pickle(pickle_file_path)