Python 熊猫数据帧:内存不足-什么';这条路更好吗?

Python 熊猫数据帧:内存不足-什么';这条路更好吗?,python,python-2.7,pandas,Python,Python 2.7,Pandas,早上好。我有一个包含500000多行数据的文件。我想从中取出360行切片,每次向下移动1行。(因此,我将得到大量数据。) 正如预期的那样,我尝试了上面的代码并得到了一个内存错误。我想有更好的方法吗 编辑:为了添加一些上下文,这是一个.h5文件,我使用pandas dataframe尝试以这种方式对其进行切片。我正在尝试创建一个数据数组,用caffenet将数据输入到一个深层神经网络中,尽管目前还不清楚它的格式 该代码适用于少量数据。只是不适合大一点的。为了更清楚我想做的事情:作为pd导入熊猫 f

早上好。我有一个包含500000多行数据的文件。我想从中取出360行切片,每次向下移动1行。(因此,我将得到大量数据。)

正如预期的那样,我尝试了上面的代码并得到了一个内存错误。我想有更好的方法吗

编辑:为了添加一些上下文,这是一个.h5文件,我使用pandas dataframe尝试以这种方式对其进行切片。我正在尝试创建一个数据数组,用caffenet将数据输入到一个深层神经网络中,尽管目前还不清楚它的格式

该代码适用于少量数据。只是不适合大一点的。为了更清楚我想做的事情:作为pd导入熊猫

f = pd.read_hdf('Sensor_Data.h5','f')
pieces = [f[x: x + 360] for x in xrange(504649)]
df = pd.concat(pieces)
[显示6 x 10的随机数表] 现在:

Dip将显示一个与上一个类似的新表,但已扩展。它现在有0,1,2,3,1,2,3,4,2,3,4,5,3,4,5,6行

现在“片段”本身不是数据帧对象,而是出于某种原因的“列表”。是否有一种简单的方法将所有这些独立的数据集(0,1,2,3)、(1,2,3,4)等转换为数据帧对象本身?(而不是将它们连接到一个数据帧中


我希望这是有意义的。

考虑使用h5py.From:“例如,您可以将存储在磁盘上的多TB数据集进行切片,就像它们是真正的NumPy阵列一样。”.

因此您有几个问题。首先,最简单的是:片段是一个列表,因为您使用列表理解创建了它,它应该是一个数据帧对象列表。如果您想将它们用作单独的数据帧对象,您可以将其索引到列表中(即片段[0]等)

但是您仍然存在这样一个问题,即您正在尝试创建一个巨大的数据帧。在没有看到如何使用代码的其余部分的情况下,我建议不要创建50万个df片段,而是在原始数据帧上循环,并在数据帧的单个片段上调用所需的任何函数:

pieces = [df[x: x + 4] for x in xrange(7)]
f = pd.concat(pieces)
f
这样,每个切片在使用后都会被释放。希望结果比帧小得多


您也可以像上面一样将所有切片写入单独的cvs文件,并根据需要读取它们。

我处理大量数据的首选方法是使用。一个缺点是,您必须将数据转换为二进制格式,以便
memmap
能够理解,但之后您可以轻松处理大型数据集。你真的需要为你的切片存储所有这些冗余数据吗?这些切片的最终用途是什么?也许最好只是创建一个迭代器。好吧,你基本上是把你的数据乘以360,对吧?但是这个最终的数据帧充满了大量冗余数据,这是毫无意义的。我猜你正在这样做用于以后的计算?但是有比浪费内存更好的方法来进行这些计算。例如,移动/扩展函数,高级(花式)索引等。我怀疑您需要做的是思考如何进行CALC,而不是如何扩展内存占用。是的,这是为了以后的CALC。我将编辑这个问题,使其更清楚一些……在新的上下文中,我应该做什么?通常的做法是:制作示例数据帧(尽可能小),显示所需输出,显示您试图编写的实际代码。另请参见此处:
pieces = [df[x: x + 4] for x in xrange(7)]
f = pd.concat(pieces)
f
for x in xrange(504649):
    result = my_func(df[x:x+360])