在某些情况下,当我加载一个现有的 pickle 文件,然后再次转储它时,大小几乎减半。
我想知道为什么,第一个怀疑是协议版本。我可以以某种方式找出文件被腌制的协议版本吗?
有没有办法告诉 Pandas在编写 HDF5 文件时使用特定的 pickle 协议(例如 4)?
这是情况(大大简化):
客户端 A 正在使用python=3.8.1(以及pandas=1.0.0和pytables=3.6.1)。A 使用df.to_hdf(file, key).
客户端 B 正在使用python=3.7.1(并且,正如它发生的那样,pandas=0.25.1并且 --pytables=3.5.2但这无关紧要)。B 尝试使用 读取 A 写入的数据pd.read_hdf(file, key),但失败并显示ValueError: unsupported pickle protocol: 5。
请注意,这不会发生在纯数字的 DataFrame 中(例如pd.DataFrame(np.random.normal(size=(10,10))). 所以这是一个可重复的示例:
(base) $ conda activate py38
(py38) $ python
Python 3.8.1 (default, Jan 8 2020, 22:29:32)
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" …Run Code Online (Sandbox Code Playgroud)