运行 中型合并函数 ipython notebook jupyter 时出现内存错误
Memory error when running medium sized merge function ipython notebook jupyter
我正在尝试使用 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
This is a .xlsx that cointains asset names the script needs
该脚本获取有关各种资产的数据,然后对其进行清理并将每个资产保存到字典中的数据框中
如果有人能看一下,看看是否有任何立即错误,我将不胜感激。其他方面请告知我可以进行哪些测试 运行.
EDIT3:我发现很难理解为什么会这样,代码在测试版中运行良好,我现在所做的只是添加更多资产。
EDIT4:我运行我检查了对象(dfs 的字典)的大小,它是 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
for coin in coins[:37]:' 产生错误,有什么想法吗?
EDIT6:第 36 个元素是 'Syscoin',我做了 coins.remove('Syscoin') 但是内存问题仍然存在。所以好像是第36个元素无论是什么币都有问题
EDIT7:goCards 建议似乎有效,但代码的下一部分:
merged = data2['merged']
merged['Total_MC'] = merged.drop('timestamp',axis=1).sum(axis=1)
产生内存错误。我很难过
关于存储,我建议使用简单的 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')
我也遇到了同样的问题!
"MemoryError:" 由笔记本执行 pandas。在发布之前,我还丝网印刷了很多观察结果。
重新安装 Anaconda 没有帮助。后来意识到我正在使用 IPython notebook 而不是 Jupyter notebook。切换到 Jupyter 笔记本。一切正常!
我正在尝试使用 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
This is a .xlsx that cointains asset names the script needs
该脚本获取有关各种资产的数据,然后对其进行清理并将每个资产保存到字典中的数据框中
如果有人能看一下,看看是否有任何立即错误,我将不胜感激。其他方面请告知我可以进行哪些测试 运行.
EDIT3:我发现很难理解为什么会这样,代码在测试版中运行良好,我现在所做的只是添加更多资产。
EDIT4:我运行我检查了对象(dfs 的字典)的大小,它是 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
for coin in coins[:37]:' 产生错误,有什么想法吗?
EDIT6:第 36 个元素是 'Syscoin',我做了 coins.remove('Syscoin') 但是内存问题仍然存在。所以好像是第36个元素无论是什么币都有问题
EDIT7:goCards 建议似乎有效,但代码的下一部分:
merged = data2['merged']
merged['Total_MC'] = merged.drop('timestamp',axis=1).sum(axis=1)
产生内存错误。我很难过
关于存储,我建议使用简单的 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')
我也遇到了同样的问题! "MemoryError:" 由笔记本执行 pandas。在发布之前,我还丝网印刷了很多观察结果。
重新安装 Anaconda 没有帮助。后来意识到我正在使用 IPython notebook 而不是 Jupyter notebook。切换到 Jupyter 笔记本。一切正常!