【问题标题】:Read a pickle with a different version of pandas用不同版本的熊猫阅读泡菜
【发布时间】:2019-11-12 15:49:09
【问题描述】:

我无法读取使用不同版本的 Python pandas 保存的 pickle 文件。我知道以前在这里已经问过这个问题,但是使用pd.read_pickle("my_file.pkl") 提供的解决方案也不起作用。我认为(但我不确定)这些泡菜文件是用比我现在工作的机器更新版本的 pandas 创建的。

很遗憾,我不是管理员,我无法更改 pandas 的版本。如何阅读我的文件?它们是不可恢复的吗?

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    关于您关于 cmets 兼容性的问题,根据 docs related to pickle,“如果选择了兼容的 pickle 协议,pickle 序列化格式保证在 Python 版本之间向后兼容......”如果文件用比您正在阅读的新协议,您可能不走运。

    【讨论】:

      【解决方案2】:

      您将需要与使用 to_pickle 的版本相同(或更高版本)的 pandas。 当 pandas 将数据帧转换为 pickle 时,压缩过程是特定于该版本的。

      我建议联系您的管理员并让他们转换pickle to csv,这样您就可以使用任何版本的熊猫打开它。

      除非数据框包含对象 csv 应该没问题

      【讨论】:

      • 谢谢。新版本能否读取旧版本,或者它必须与创建它的 pandas 版本完全相同?
      • 无论何时在二进制级别(即泡菜)工作时,您通常都需要相同的版本
      • 好的。如果有人感兴趣,管理员建议virtualenv,我可以在其中安装更新版本的熊猫。这样就解决了。
      【解决方案3】:

      对于在单个单元格中包含列表和数组等对象的数据框,而不是转换为 csv 文件,另存为 hdf 工作。

      步骤 1

      使用最新版本的 python 和 pandas(在我的例子中是 python 3.8 和 pandas 1.4.1)加载数据。

      import pandas as pd
      import pickle
      data = pd.read_pickle('path/to/file.pkl')
      

      第二步

      将加载的数据保存为hdf文件,设置pickle协议为4,key为数据框

      pickle.HIGHEST_PROTOCOL = 4
      data.to_hdf('output/folder/path/to/file.hdf', 'df')
      

      第三步

      使用较旧的 python 加载 hdf 文件(我在 google colab 上使用 Python 3.7 和 pandas 1.3.5)

      import pandas as pd
      data = pd.read_hdf(path)  
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-16
        • 2016-09-25
        • 2015-05-09
        • 2019-11-05
        • 2016-11-03
        • 2019-01-23
        相关资源
        最近更新 更多