pandas 属性错误:无法获取属性"_unpickle_block"

vsmadaxz  于 2023-01-07  发布在  其他
关注(0)|答案(5)|浏览(2282)

使用时:

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建议检查我正在使用的pickle的版本,在我开发代码的机器上和运行代码的服务器上都是一样的,我到处都找不到答案,请帮助。

fdx2calv

fdx2calv1#

我不认为问题出在pickle模块,而是Pandas版本。您的文件可能是用旧版本的Pandas创建的。现在您使用了新版本,pickle无法“反序列化”对象,因为API发生了变化。
尝试降级您的Pandas版本并重新加载文件。您也可以尝试使用pd.read_pickle

hyrbngr7

hyrbngr72#

在我的情况下,我不得不升级而不是降级Pandas版本。只要确保它们匹配。给未来读者的一些提示:
询问版本:

import pandas as pd
pd.__version__

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

%pip install pandas==1.4.1
w6lpcovy

w6lpcovy3#

我在使用vscode和.net交互式笔记本扩展时遇到了这个错误。当我更新panda * 和 * 重新启动笔记本时,它得到了解决。

tf7tbtn2

tf7tbtn24#

只需将读取功能从pickle.load(f)更改为pd.read_pickle(f),而无需更改版本中的任何内容。

# from this :
with open('Data.pkl', 'rb') as f:
     t = pickle.load(f)

# to this:
import pandas as pd 
with open('Data.pkl', 'rb') as f:
      t = pd.read_pickle(f)

这就解决了我的问题。

34gzjxbg

34gzjxbg5#

所有你必须做的是降级你的sklearn版本到1.0.2
不工作?请确保你在你的代码和环境中使用的版本相同.
那就行了。
快乐编码!!

相关问题