我正在尝试使用 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]). 这不会使用任何酸洗来保存您的数据并解决问题。
| 归档时间: |
|
| 查看次数: |
25421 次 |
| 最近记录: |