numpy 无法加载包含pickle数据的文件- Python .npy I/O

xoshrz7s  于 2022-11-24  发布在  Python
关注(0)|答案(9)|浏览(1146)

我尝试使用www.example.com()将 Dataframe 和矩阵保存为.npy文件np.save,然后使用np.load()读取它们,但收到以下错误:

File "/Users/sofiafarina/opt/anaconda3/lib/python3.7/site-packages/numpy/lib/npyio.py", line 457, in load
    raise ValueError("Cannot load file containing pickled data "

ValueError: Cannot load file containing pickled data when allow_pickle=False

即使我写allow_pickle=True,我也会得到一个错误:

File "/Users/sofiafarina/opt/anaconda3/lib/python3.7/site-packages/numpy/lib/npyio.py", line 463, in load
    "Failed to interpret file %s as a pickle" % repr(file))

OSError: Failed to interpret file 'finaldf_p_85_12.npy' as a pickle

那么,我如何从python脚本中保存一个df,然后将其加载到另一个脚本中呢?我应该使用其他函数吗?谢谢!

q3aa0525

q3aa05251#

我遇到了同样的问题。请尝试np.loadtxt

rn0zuynd

rn0zuynd2#

我已经处理这个问题很长时间了。我已经尝试了这里列出的所有解决方案,但是它们都不起作用。我已经尝试了不同版本的python,如3.7, 2.7, 3.9,结果是一样的。
最后,我注意到扩展名为.npy的文件已损坏,因此它会发出此错误。以下是发出错误的行。

npyFile = np.load('file1.npy')

因此,无论谁遇到同样的问题,首先最好检查.npy文件。

5f0d552i

5f0d552i3#

我上传了我的文件到驱动器,我从驱动器上传了文件。它解决了。

from google.colab import drive
drive.mount("/content/drive")
label = np.load("path/labels.npy")
noj0wjuj

noj0wjuj4#

确保文件没有损坏。

zxlwwiss

zxlwwiss5#

我使用下面的语法来加载.npy文件,它工作了。

np.load("finaldf_p_85_12.npy",allow_pickle=True)

我认为需要添加allow_pickle=True参数。

kuuvgm7e

kuuvgm7e6#

顶级域名注册权;

经过数百次的搜索和数小时的调试,我发现问题出在git-lfs上,我的文件没有被git-lfs拉出来。

git lfs install
git lfs pull

我想numpy需要正确地报告这件事
我遇到了完全相同的问题。dtype在我的.npz文件中是uint8,所以不是一个对象,技术上allow_pickle不应该是必需的。我的numpy版本是1.20.x
使用allow_pickle=False时得到以下结果
ValueError: Cannot load file containing pickled data when allow_pickle=False
使用allow_pickle=True,我得到了
OSError: Failed to interpret file 'finaldf_p_85_12.npy' as a pickle

mum43rcc

mum43rcc7#

Python使用了一个名为Pickle的原生数据序列化模块,嵌套数据(比如一个列表的列表)使用pickle进行序列化,NumPy对pickle发出警告。
警告:加载包含对象数组的文件时使用pickle模块,该模块对于错误或恶意构造的数据不安全。考虑传递allow_pickle=False以加载已知不包含对象数组的数据,以便更安全地处理不受信任的源。
您可能正在保存由单个dataFrame组成的数组。这会导致pickle。示例:

x =  array([[ 0.1,  0.1,  0.1],
       [ 0.1,  0.1,  0.1],
       [ 0.1,  0.1,  0.1],
       [ 0.1,  0.1,  0.1],
       [ 0.1,  0.1,  0.1],
       [ 0.1,  0.1,  0.1],
       [ 0.1,  0.1,  0.1]])

在这种情况下,尝试将numpy数组保存为np.save(filename, x[0])。这样就不会使用任何pickling来保存数据,从而解决了这个问题。

0dxa2lsx

0dxa2lsx8#

OSError提示您可能遇到了python 2/python 3问题。当我尝试读取python 3的文件时,遇到了同样的问题和错误,而该文件是用python 2编写的。对我来说,使用带有以下参数的np.load命令是有效的:

np.load('file.npy',allow_pickle=True,fix_imports=True,encoding='latin1')

numpy.load的文档中提到了编码参数,“只有在加载Python 2生成pickle文件时才有用,Python 3中包括包含对象数组的npy/npz文件。”

woobm2wo

woobm2wo9#

现有的答案都是有用的。只是需要注意的是,我只是从其他人的pickle文件中得到了这个错误,当文件本身损坏时。如上所述,allow_pickle=False抱怨pickle被禁用,allow_pickle=True抱怨它不是一个有效的pickle文件。在我的情况下,修复只是重新下载文件。

相关问题