我正在尝试使用 np.save() 将数据框和矩阵保存为 .npy 文件,然后使用 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
Run Code Online (Sandbox Code Playgroud)
即使我写了 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
Run Code Online (Sandbox Code Playgroud)
那么我怎么能从 python 脚本中保存一个 df 然后在另一个脚本中加载它呢?我应该使用其他功能吗?谢谢!
小智 14
太长了;
经过数百次搜索和几个小时的调试后,我发现问题出在 git-lfs 上,我的文件没有使用 git-lfs 拉取。
git lfs install
git lfs pull
Run Code Online (Sandbox Code Playgroud)
我认为 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
小智 6
我使用下面的语法来加载.npy
文件并且它工作正常。
np.load("finaldf_p_85_12.npy",allow_pickle=True)
Run Code Online (Sandbox Code Playgroud)
我认为您需要添加allow_pickle=True
参数。
现有的答案都是有用的。请注意,当文件本身损坏时,我刚刚从其他人的 pickle 文件中收到此错误。如上所述,allow_pickle=False
抱怨 pickle 被禁用,并allow_pickle=True
抱怨它不是有效的 pickle 文件。在我的情况下,修复方法只是重新下载文件。
小智 2
Python 使用名为 Pickle 的本机数据序列化模块。嵌套数据(如列表列表)使用 pickle 进行序列化,NumPy 会警告不要进行 pickle。
警告:加载包含对象数组的文件使用 pickle 模块,该模块不能防止错误或恶意构造的数据。考虑传递allow_pickle=False来加载已知不包含对象数组的数据,以便更安全地处理不受信任的源。
您可能正在保存一个由单个数据帧组成的数组。这会导致酸洗。例子:
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]])
Run Code Online (Sandbox Code Playgroud)
在这种情况下,请尝试仅将 numpy 数组保存为np.save(filename, x[0])
. 这不会使用任何酸洗来保存您的数据并解决问题。