我使用to_pickle
将操作系统X上的DataFrame
导出到pickle
。
将其加载回OS X(使用read_pickle
)会返回与预期相同的DataFrame
,但使用相同的函数将其加载到Linux系统( Debian )上不同的内容。
从几个帖子看,pickle
在使用二进制模式时可以保证是跨平台的(参见:Is pickle file of python cross-platform?),但是to_pickle
和{ {3}}不接受任何参数,我无法从他们的文档中看出它是否是默认的二进制文件。
我怎么知道他们是不是?
如何确保我的pickle
文件在不同平台上相同?
备注:
这是使用read_pickle
创建的.pickle
文件的一部分:
945d 948c 055f 6461 7461 948c 1570 616e
6461 732e 636f 7265 2e69 6e74 6572 6e61
6c73 948c 0c42 6c6f 636b 4d61 6e61 6765
7294 9394 297d 9492 9428 5d94 288c 1370
使用前缀b
(df.to_pickle(b'pickle_folder/df.pickle'
而不是df.to_pickle('pickle_folder/df.pickle'
)导出它不会改变其内容。
两个python版本都是相同的(3.4.4)。
修改
从to_pickle
开始,他们似乎使用最高协议和二进制读/写。这回答了我的第一个问题。仍然在寻找平台之间不同的原因。
答案 0 :(得分:1)
我无法直接回答你的问题:
为什么平台之间存在差异?
但作为一种解决方法,您可以使用标准HDF5 format,它可以在所有平台上运行并具有很好的功能:
where='where clause'
参数读取满足条件的那部分数据的能力(必须将这些列编入索引 - 检查data_columns
参数)。因此,您可能在HDF5文件中拥有大量数据,您可以以块的形式处理它,有效地将(使用索引)块读取到内存中。即您不需要从磁盘读取所有数据以进行过滤。blosc
)根据使用的dtypes,可以非常快速地存储和读取HDF5文件。注意:与object
格式相比,使用字符串(dtype:Pickle
)要慢得多。
另一个标准选项是使用一个中央数据库,该数据库应该适用于所有平台,并且您可以在数据库服务器端(预)过滤和排序数据。