Python在OS X和Linux之间的差异(通过Pandas DataFrame对象)

时间:2016-09-04 08:04:31

标签: python-3.x pandas dataframe cross-platform pickle

我使用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

使用前缀bdf.to_pickle(b'pickle_folder/df.pickle'而不是df.to_pickle('pickle_folder/df.pickle')导出它不会改变其内容。

两个python版本都是相同的(3.4.4)。

修改

to_pickle开始,他们似乎使用最高协议和二进制读/写。这回答了我的第一个问题。仍然在寻找平台之间不同的原因。

1 个答案:

答案 0 :(得分:1)

我无法直接回答你的问题:

  

为什么平台之间存在差异?

但作为一种解决方法,您可以使用标准HDF5 format,它可以在所有平台上运行并具有很好的功能:

  • 只能使用where='where clause'参数读取满足条件的那部分数据的能力(必须将这些列编入索引 - 检查data_columns参数)。因此,您可能在HDF5文件中拥有大量数据,您可以以块的形式处理它,有效地将(使用索引)块读取到内存中。即您不需要从磁盘读取所有数据以进行过滤。
  • 压缩数据的能力(例如使用非常快速且非常有效的压缩算法:blosc

根据使用的dtypes,可以非常快速地存储和读取HDF5文件。注意:与object格式相比,使用字符串(dtype:Pickle)要慢得多。

另一个标准选项是使用一个中央数据库,该数据库应该适用于所有平台,并且您可以在数据库服务器端(预)过滤和排序数据。