Python Pandas to_pickle无法腌制大型数据帧

Jos*_*xas 11 python pickle pandas

我有一个带有500,000行的数据帧"DF".以下是每列的数据类型:

ID      int64
time    datetime64[ns]
data    object
Run Code Online (Sandbox Code Playgroud)

"data"列中的每个条目都是一个size = [5,500]的数组

当我尝试使用保存此数据帧时

DF.to_pickle("my_filename.pkl")
Run Code Online (Sandbox Code Playgroud)

它给我返回了以下错误:

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

OSError: [Errno 22] Invalid argument
Run Code Online (Sandbox Code Playgroud)

我也尝试这种方法,但我得到同样的错误:

import pickle


with open('my_filename.pkl', 'wb') as f:
    pickle.dump(DF, f)
Run Code Online (Sandbox Code Playgroud)

我尝试保存此数据帧的10行:

DF.head(10).to_pickle('test_save.pkl')
Run Code Online (Sandbox Code Playgroud)

而且我没有任何错误.因此,它可以节省小DF而不是大DF.

我在Mac上使用python 3,ipython notebook 3.

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

vol*_*myr 12

直到在pickle/pandas方面的某个地方有一个修复,我会说更好的选择是使用替代的IO后端.HDF适用于大型数据集(GB).因此您无需添加其他拆分/组合逻辑.

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

df = pd.read_hdf('my_filename.hdf','mydata')
Run Code Online (Sandbox Code Playgroud)


小智 4

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

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

然后pickle较小的数据帧。

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

我同意这是一种捏造,而且不是最理想的。如果有人可以提出一个“正确”的答案,我会有兴趣看到它,但我认为这很简单,因为数据帧不应该超过一定的大小。

分割一个大的 pandas 数据框