Python 在移动中存储大型数据帧

Python 在移动中存储大型数据帧,python,pandas,cython,Python,Pandas,Cython,我试图在python中存储大型CSV文件,但在能够调用以_CSV之前,我的RAM内存已经用完 我的代码如下所示: v = [] v2 = [] ... for i in object: v.append(i.X) v2.append(i.Y) ... db = {'V': v, 'V2': v2, ... } df = pandas.DataFrame(db, columns=['V','V2',...]) df.to_csv('f

我试图在python中存储大型CSV文件,但在能够调用
以_CSV
之前,我的RAM内存已经用完

我的代码如下所示:

v = []
v2 = []
...

for i in object:
    v.append(i.X)
    v2.append(i.Y)
    ...

db = {'V': v,
      'V2': v2,
      ...
     }

df = pandas.DataFrame(db, columns=['V','V2',...])
df.to_csv('filename.csv', sep=',', encoding='utf-8', index=False)
然而,向量
v
v2
等都非常大(长度远远超过100000000)

我假设必须有一种方法可以“在运行中”创建数据帧,并将结果附加到输出文件中,而可能不需要这些向量作为中间对象。在python/Cython上如何实现这一点?多谢各位

编辑

我已经找到了这个“解决方案”,在这个“解决方案”中,没有生成中间产物,并且在不存储永久大向量的情况下生成了预期的输出

我仍然觉得这不是一个最佳的解决方案,所以我不会把它作为一个答案,希望有人能提供更好的方法。可能的一个具有较少的I/O操作,如此

count = 0
for i in object:
    df = pandas.DataFrame({'V': [i.X], 'V2': [i.Y], ...})
    if count==0:
        df.to_csv('filename.csv', sep=',', encoding='utf-8', index=False)
        count = 1
    else:
        df.to_csv('filename.csv', sep=',', encoding='utf-8', index=False, header=False, mode='a')

看起来你想要一个真正的数据库…我在考虑CSV,主要是因为这个文件将在R中处理,所以它似乎是一种方便的格式。我可以检查什么样的数据库格式来提高性能?假设numpy数组或类似的东西可以分块执行此操作,而不是逐个循环每个元素。可能是编写一个HDF5文件(h5py),然后使用大小为100000000的float64数组读取它,其大小仅为800MB,另一种方法是将numpy数组写入磁盘(np.save(“Filename”,arr))并使用