Python Pandas to_pickle 无法 pickle 大数据帧

Python Pandas to_pickle cannot pickle large dataframes

我有一个包含 500,000 行的数据框 "DF"。以下是每列的数据类型:

ID      int64
time    datetime64[ns]
data    object

"data" 列中的每个条目都是一个大小为 [5,500]

的数组

当我尝试使用

保存此数据框时
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 notebook 3。

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

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

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

然后 pickle 较小的数据帧。

当你解开它们时,使用 pandas.append 或 pandas.concat 将所有东西粘在一起。

我同意这是一种捏造和次优的做法。如果有人可以提出 "proper" 答案,我很想看看它,但我认为它就像数据帧一样简单,不应该超过一定的大小。

Split a large pandas dataframe

直到 pickle/pandas 方面的某处得到修复, 我会说更好的选择是使用替代 IO 后端。 HDF 适用于大型数据集 (GB)。所以你不需要添加额外的 split/combine 逻辑。

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

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

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

data_df.to_pickle('data_df.pickle.gzde', compression='gzip')

我 运行 遇到了同样的问题,并将原因追溯到内存问题。根据 this recourse 这通常不是由内存本身引起的,而是将太多资源移动到交换 space 中。我能够通过禁用与​​命令(在 link 中提供)一起禁用交换来保存大 pandas 文件:

    swapoff -a