首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在将长长的DEAP日志(10 MM)转换为Colab中的数据帧时,修正RAM限制?

如何在将长长的DEAP日志(10 MM)转换为Colab中的数据帧时,修正RAM限制?
EN

Stack Overflow用户
提问于 2019-07-02 10:14:05
回答 1查看 59关注 0票数 2

当将DEAP的日志(基本上是字典列表)和大约10个MM条目转换为一个Dataframe进行进一步处理时,我收到了一条关于Google中RAM溢出的消息。

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

字典存储这样的值:

代码语言:javascript
复制
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左右的内存。

我试过:

代码语言:javascript
复制
from itertools import chain
fitness_res = pd.DataFrame(list(chain.from_iterable(logbook)))

代码语言:javascript
复制
pop_records = [record for record in logbook]
fitness_res = pd.DataFrame(pop_records)

但没有成功。

我得到的错误是:

代码语言:javascript
复制
Your session crashed after using all available RAM. View runtime logs

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-02 10:30:38

DataFrame在pandas中将所有数据加载到内存中。您使用的方法是在将数据传递到pandas以存储在DataFrame中之前使用额外的内存来加载数据。

代码语言:javascript
复制
from itertools import chain
fitness_res = pd.DataFrame(list(chain.from_iterable(logbook)))

这意味着在将数据传递到pd.DataFrame之前,您正在创建一个包含所有读取值的列表。

鉴于第二种方法:

代码语言:javascript
复制
pop_records = [record for record in logbook]
fitness_res = pd.DataFrame(pop_records)

您正在使用列表理解创建一个列表,该列表再次将所有数据加载到内存中,然后将其传递给pandas

我的建议是使用pandas.read_pickle直接在带泡菜的文件上使用熊猫数据加载功能。

代码语言:javascript
复制
fitness_res = pd.read_pickle(pickle_file_path)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56850149

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档