繁体   English   中英

Python Pandas to_pickle 不能腌制大型数据帧

[英]Python Pandas to_pickle cannot pickle large dataframes

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

ID      int64
time    datetime64[ns]
data    object

“数据”列中的每个条目都是一个大小为 [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/pandas 方面的某个地方得到修复之前,我认为更好的选择是使用替代 IO 后端。 HDF 适用于大型数据集 (GB)。 所以你不需要添加额外的拆分/组合逻辑。

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

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

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

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

然后pickle较小的数据帧。

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

我同意这是一种软糖和次优的。 如果有人可以提出一个“正确”的答案,我会很想看到它,但我认为它就像数据框不应该超过特定大小一样简单。

拆分大熊猫数据框

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

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

我遇到了同样的问题,并将原因追溯到内存问题。 根据这种资源,它通常实际上不是由内存本身引起的,而是由太多资源移动到交换空间引起的。 我能够通过使用命令(在该链接中提供)一起禁用交换来保存大熊猫文件:

    swapoff -a

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM