【问题标题】:AttributeError: Can't get attribute '_unpickle_block'AttributeError:无法获取属性“_unpickle_block”
【发布时间】:2022-07-17 11:41:46
【问题描述】:

使用时:

with open("data_file.pickle", "rb") as pfile:
     raw_data = pickle.load(pfile)  

我得到错误:

AttributeError: Can't get attribute '_unpickle_block' on <module 'pandas._libs.internals' from '/opt/conda/lib/python3.8/site-packages/pandas/_libs/internals.cpython-38-x86_64-linux-gnu.so'>

另一个类似问题的answer 建议检查我正在使用的泡菜版本。在我开发代码的机器上和运行代码的服务器上也是如此。我到处搜索,没有答案。请帮忙。

【问题讨论】:

    标签: python pandas dataframe pickle


    【解决方案1】:

    我认为问题不是pickle 模块,而是Pandas 版本。您的文件可能是使用旧版本的 Pandas 创建的。现在您使用更新的版本,pickle 无法“反序列化”对象,因为 API 发生了变化。

    尝试降级您的Pandas 版本并重新加载文件。您也可以尝试使用pd.read_pickle

    【讨论】:

    • 您好,感谢您的回复。这似乎是问题所在。我将机器上的 pandas 降级到服务器上的 1.1.5,现在从原始数据集本身进行初始读取时出现错误。我想知道是否有任何方法可以pickle.read 使用更新版本的 pandas 和 pickle.dump 使用 1.1.5。我试过pd.read_pickle,它抛出了同样的错误。
    • 我不知道这是否是继续的方式。但是,这就是我所做的:我使用 pandas v1.4.0 读取数据并将其序列化为 hdf5 文件。然后将 pandas 降级为 pandas v1.1.5 再次使用 pickle 序列化。 @Corralien 是对的,问题在于熊猫而不是泡菜。
    【解决方案2】:

    就我而言,我必须升级而不是降级 Pandas 版本。只要确保它们匹配。给未来读者的一些提示:

    询问版本:

    import pandas as pd
    pd.__version__
    

    并用(替换为您自己的版本)更改版本

    %pip install pandas==1.4.1
    

    【讨论】:

      【解决方案3】:

      我在使用 vscode 和 .net 交互式笔记本扩展时收到此错误。当我更新 pandas 并且重新启动笔记本时,它得到了解决。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-08-09
        • 2023-02-10
        • 1970-01-01
        相关资源
        最近更新 更多