Python无法对大型数据帧进行pickle

Python无法对大型数据帧进行pickle,python,pandas,pickle,Python,Pandas,Pickle,我有一个数据帧“DF”,有500000行。以下是每列的数据类型: ID int64 time datetime64[ns] data object “数据”列中的每个条目都是一个大小为[5500]的数组 当我尝试使用 DF.to_pickle("my_filename.pkl") 它返回给我以下错误: 12 """ 13 with open(path, 'wb') as f: ---> 14 pkl.dump(o

我有一个数据帧“DF”,有500000行。以下是每列的数据类型:

ID      int64
time    datetime64[ns]
data    object
“数据”列中的每个条目都是一个大小为[5500]的数组

当我尝试使用

DF.to_pickle("my_filename.pkl")
它返回给我以下错误:

     12     """
     13     with open(path, 'wb') as f:
---> 14         pkl.dump(obj, f, protocol=pkl.HIGHEST_PROTOCOL) 

OSError: [Errno 22] Invalid argument
我也尝试了这种方法,但得到了相同的错误:

import pickle


with open('my_filename.pkl', 'wb') as f:
    pickle.dump(DF, f)
我尝试保存此数据帧的10行:

DF.head(10).to_pickle('test_save.pkl')
我一点错误也没有。因此,它可以节省较小的DF,但不能节省较大的DF

我正在Mac上使用python 3、ipython笔记本3


请帮我解决这个问题。我真的需要把这个DF保存到pickle文件中。我在互联网上找不到解决方案。

可能不是你所希望的答案,但这就是我所做的

使用np.array_Split将数据帧分割成更小的块(虽然numpy函数不能保证工作,但现在可以了,尽管它曾经有一个bug)

然后对较小的数据帧进行pickle

当您解开它们时,请使用pandas.append或pandas.concat将所有内容重新粘合在一起

我同意这是一个软糖和次优。如果有人能提出一个“合适”的答案,我很想看看,但我认为它很简单,因为数据帧不应该超过一定的大小


直到事情的泡菜/熊猫方面有了解决方案, 我认为更好的选择是使用替代IO后端。HDF适用于大型数据集(GBs)。因此,您不需要添加额外的拆分/合并逻辑

df.to_hdf('my_filename.hdf','mydata',mode='w')

df = pd.read_hdf('my_filename.hdf','mydata')

尝试使用压缩。这对我有用


data\u df.to\u pickle('data\u df.pickle.gzde',compression='gzip')

我遇到了同样的问题,并将原因追溯到内存问题。据了解,这通常不是内存本身造成的,而是太多资源进入交换空间造成的。我可以通过禁用swap来保存大熊猫文件,同时使用以下命令(在该链接中提供):


你试过cPickle吗?无论如何,对大量数据使用pickle是次优的。我并不确信它解决了问题,但这是可能的。Pyckle在python 3中不可用。内存中的数据帧到底有多大?这是一个有待修复的错误:
    swapoff -a