Python中文
首页
教程
问答
标签
搜索
登录
注册
pandas.concat和numpy.append的大数据集出现内存错误
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>我面临一个问题,我必须在一个循环中生成大数据帧(每次两个2000 x 800熊猫数据帧计算50次迭代)。我想将结果保存在一个更大的数据框中,或者保存在类似字典的结构中。 当使用pandas.concat时,在循环中的某个点上会出现内存错误。当使用numpy.<a href="https://www.cnpython.com/list/append" class="inner-link">append</a>将结果存储在numpy数组的字典中而不是数据帧中时,也会发生同样的情况。在这两种情况下,我仍然有很多可用内存(几GB)。这对熊猫或小企鹅来说是不是太多数据了?有没有更节省内存的方法来存储我的数据而不将其保存在磁盘上?</p> <p>例如,只要<code>nbIds</code>大于376,以下脚本就会失败:</p> <pre><code>import pandas as pd import numpy as np nbIds = 376 dataids = range(nbIds) dataCollection1 = [] dataCollection2 = [] for bs in range(50): newData1 = pd.DataFrame( np.reshape(np.random.uniform(size = 2000 * len(dataids)), (2000,len(dataids )))) dataCollection1.append( newData1 ) newData2 = pd.DataFrame( np.reshape(np.random.uniform(size = 2000 * len(dataids)), (2000,len(dataids )))) dataCollection2.append( newData2 ) dataCollection1 = pd.concat(dataCollection1).reset_index(drop = True) dataCollection2 = pd.concat(dataCollection2).reset_index(drop = True) </code></pre> <p>当<code>nbIds</code>大于等于665时,下面的代码失败</p> <pre><code>import pandas as pd import numpy as np nbIds = 665 dataids = range(nbIds) dataCollection1 = dict( (i , np.array([])) for i in dataids ) dataCollection2 = dict( (i , np.array([])) for i in dataids ) for bs in range(50): newData1 = np.reshape(np.random.uniform(size = 2000 * len(dataids)), (2000,len(dataids ))) newData1 = pd.DataFrame(newData1) newData2 = np.reshape(np.random.uniform(size = 2000 * len(dataids)), (2000,len(dataids))) newData2 = pd.DataFrame(newData2) for i in dataids : dataCollection1[i] = np.append(dataCollection1[i] , np.array(newData1[i])) dataCollection2[i] = np.append(dataCollection2[i] , np.array(newData2[i])) </code></pre> <p>每次我都需要计算这两个数据帧,并且对于每个元素<code>i</code>我需要获得一个pandas系列或一个包含为<code>i</code>生成的50*2000个数字的numpy数组。理想情况下,我需要能够在<code>nbIds</code>等于或大于800的情况下运行此命令。 有没有直截了当的方法?</p> <p>我使用32位的Python和Python 2.7.5、pandas 0.12.0和numpy 1.7.1。</p> <p>非常感谢你的帮助!</p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>正如使用eathstar、Boud和Jeff在评论中所建议的那样,切换到64位python可以做到这一点。<br/> 如果精度损失不是问题,那么使用Jeff建议的float32数据类型也会增加在32位环境中可以处理的数据量。</p>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
在python3中使用Scipy pearsonr函数
9 回答
在Python3中使用scipy对多个lorentzian进行数据拟合
4 回答
在Python3中使用Script=argv
6 回答
在python3中使用selenium webdriver进行未解析的回溯
2 回答
在python3中使用selenium和phantomjs的网页截图之前如何等待?
2 回答
在Python3中使用Selenium和Requests模块从网页获取文件
1 回答
在python3中使用SIGINT终止函数
8 回答
在Python3中使用SIGTERM时,允许进程完成而不是中断
4 回答
在python3中使用smtplib发送XML内容
3 回答
在python3中使用socket库(RFCOMM模式)重新连接蓝牙设备?
8 回答
在python3中使用sounddevice和numpy编写wav文件
9 回答
在python3中使用Sqlalchemy插入MySQL查找类型错误的原因
1 回答
在python3中使用sqlite、pandas和sqlalchemy很难让rollback工作
1 回答
在python3中使用SQLite的FTS3/4
1 回答
在Python3中使用struct.calcsize()和len()有区别吗?
1 回答
在python3中使用substring函数时发生TypeError
2 回答
在Python3中使用Tkinter entry小部件写入串行设备
1 回答
在python3中使用tkinter时,如何在每次按下函数时获得运行该函数的按钮?
9 回答
在python3中使用tkinter的子帧
10 回答
在Python3中使用tryexcept块时,如何避免使用未初始化的变量?
6 回答