运行中型合并功能时出现内存错误ipython notebook jupyter

时间:2016-02-06 15:57:37

标签: pandas out-of-memory ipython

我正在尝试使用for循环合并大约100个数据帧,并且出现内存错误。我正在使用ipython jupyter notebook

以下是数据样本:

    timestamp   Namecoin_cap
0   2013-04-28  5969081
1   2013-04-29  7006114
2   2013-04-30  7049003

每帧约1000行

Here's the error in detail, I've also include my merge function.

My system is currently using up 64% of it memory

我搜索过类似的问题,但似乎大多数是非常大的数组> 1GB,相比之下,我的数据相对较小。

编辑:有些东西是可疑的。之前我写了一个beta程序,这是用4个数据帧测试的,我只是通过pickle导出它,它是500kb。现在当我尝试导出100帧时,我得到了内存错误。但它会导出一个2GB的文件。所以我怀疑某个地方我的代码创建了某种循环,创建了一个非常大的文件。注意,100帧存储在字典中

EDIT2:我已将scrypt导出到.py

http://pastebin.com/GqaHr7xc

This is a .xlsx that cointains asset names the script needs

脚本获取有关各种资产的数据,然后清理它并将每个资产保存到字典中的数据框

如果有人能看一眼,看看是否有任何错误,我真的很感激。其他明智的请告知我可以进行哪些测试。

EDIT3:我发现很难理解为什么会发生这种情况,代码在测试版中运行良好,我现在所做的就是添加更多资产。

EDIT4:我对对象(dfs的dict)进行了大小检查,它是1,066,793字节

EDIT5:问题在于硬币37的合并功能

for coin in coins[:37]:
    data2['merged'] = pd.merge(left=data2['merged'],right=data2[coin], left_on='timestamp', right_on='timestamp', how='left')

这是发生错误的时间。 for coin in coins[:36]:' doesn't produce an error however硬币中的硬币[:37]:'产生错误,任何想法?

EDIT6:第36个元素是'Syscoin',我做了硬币。删除('Syscoin')然而内存问题仍然存在。因此,无论硬币是什么,硬币中的第36个元素似乎都存在问题

EDIT7:goCards建议似乎在下一部分代码中起作用了:

merged = data2['merged']
merged['Total_MC'] = merged.drop('timestamp',axis=1).sum(axis=1)

产生内存错误。我很难过

2 个答案:

答案 0 :(得分:2)

关于存储,我建议使用简单的csv而不是pickle。 Csv是一种更通用的格式。它是人类可读的,您可以更轻松地检查数据质量,尤其是在数据增长时。

file_template_string='%s.csv'
for eachKey in dfDict:
    filename = file_template_string%(eachKey)
    dfDict[eachKey].to_csv(filename)

如果您需要对文件进行约会,您还可以在文件名中添加时间戳。

import time
from datetime import datetime
cur = time.time()
cur = datetime.fromtimestamp(cur)
file_template_string = "%s_{0}.csv".format(cur.strftime("%m_%d_%Y_%H_%M_%S"))

您的代码中存在一些明显的错误。

for coin in coins: #line 61,89
for coin in data: #should be

df = data2['Namecoin'] #line 87
keys = data2.keys()
keys.remove('Namecoin')
for coin in keys:
    df = pd.merge(left=df,right=data2[coin], left_on='timestamp', right_on='timestamp', how='left')

答案 1 :(得分:0)

同样的问题发生在我身上! “MemoryError:”由笔记本执行pandas。在发布之前我还有大量的观察屏幕。

重新安装Anaconda没有帮助。后来意识到我正在使用IPython笔记本而不是Jupyter笔记本。切换到Jupyter笔记本。一切都很好!