我尝试使用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,然后将其加载到另一个脚本中呢?我应该使用其他函数吗?谢谢!
9条答案
按热度按时间q3aa05251#
我遇到了同样的问题。请尝试
np.loadtxt
。rn0zuynd2#
我已经处理这个问题很长时间了。我已经尝试了这里列出的所有解决方案,但是它们都不起作用。我已经尝试了不同版本的
python
,如3.7, 2.7, 3.9
,结果是一样的。最后,我注意到扩展名为
.npy
的文件已损坏,因此它会发出此错误。以下是发出错误的行。因此,无论谁遇到同样的问题,首先最好检查
.npy
文件。5f0d552i3#
我上传了我的文件到驱动器,我从驱动器上传了文件。它解决了。
noj0wjuj4#
确保文件没有损坏。
zxlwwiss5#
我使用下面的语法来加载
.npy
文件,它工作了。我认为需要添加
allow_pickle=True
参数。kuuvgm7e6#
顶级域名注册权;
经过数百次的搜索和数小时的调试,我发现问题出在git-lfs上,我的文件没有被git-lfs拉出来。
我想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
mum43rcc7#
Python使用了一个名为Pickle的原生数据序列化模块,嵌套数据(比如一个列表的列表)使用pickle进行序列化,NumPy对pickle发出警告。
警告:加载包含对象数组的文件时使用pickle模块,该模块对于错误或恶意构造的数据不安全。考虑传递allow_pickle=False以加载已知不包含对象数组的数据,以便更安全地处理不受信任的源。
您可能正在保存由单个dataFrame组成的数组。这会导致pickle。示例:
在这种情况下,尝试将numpy数组保存为
np.save(filename, x[0])
。这样就不会使用任何pickling来保存数据,从而解决了这个问题。0dxa2lsx8#
OSError提示您可能遇到了python 2/python 3问题。当我尝试读取python 3的文件时,遇到了同样的问题和错误,而该文件是用python 2编写的。对我来说,使用带有以下参数的np.load命令是有效的:
numpy.load的文档中提到了编码参数,“只有在加载Python 2生成pickle文件时才有用,Python 3中包括包含对象数组的npy/npz文件。”
woobm2wo9#
现有的答案都是有用的。只是需要注意的是,我只是从其他人的pickle文件中得到了这个错误,当文件本身损坏时。如上所述,
allow_pickle=False
抱怨pickle被禁用,allow_pickle=True
抱怨它不是一个有效的pickle文件。在我的情况下,修复只是重新下载文件。