Python pd.read_hdf抛出';无法将此数组的可写标志设置为True';

Python pd.read_hdf抛出';无法将此数组的可写标志设置为True';,python,pandas,pytables,hdf,Python,Pandas,Pytables,Hdf,跑步时 pd.read\u hdf('myfile.h5') 我得到以下回溯错误: […一些更长的回溯]] 中的~/.local/lib/python3.6/site-packages/pandas/io/pytables.py 读取阵列(自身、键、启动、停止)2487 2488如果 iInstance(节点、表、VLArray): ->2489 ret=node[0][start:stop]2490 else:2491 dtype=getattr(attrs,“value\u type”,无)

跑步时

pd.read\u hdf('myfile.h5')

我得到以下回溯错误:

[…一些更长的回溯]]

中的~/.local/lib/python3.6/site-packages/pandas/io/pytables.py 读取阵列(自身、键、启动、停止)2487 2488如果 iInstance(节点、表、VLArray): ->2489 ret=node[0][start:stop]2490 else:2491 dtype=getattr(attrs,“value\u type”,无)

中的~/.local/lib/python3.6/site-packages/tables/vlarray.py getitem(self,key)

读取中的~/.local/lib/python3.6/site-packages/tables/vlarray.py(self, 开始、停止、步骤)

tables.hdf5extension.VLArray.\u read\u array()中的tables/hdf5extension.pyx

ValueError:无法将此数组的可写标志设置为True


不知道发生了什么事。我已经尝试重新安装了
熊猫
基本上什么都可以,但我不想读它。

您使用的是numpy 1.16吗?它与pytables的最新版本不兼容(请参阅),但pytables团队尚未发布固定版本:


我发现解决这个问题的唯一方法是降级numpy

似乎是
时间-日期
字符串导致了问题,当我将这些字符串从文本转换为numpy
(pd.to_datetime())
并存储表时,问题消失了,所以可能与文本数据有关?

将PyTables升级到版本>3.5.1应该可以解决这个问题

pip install --upgrade tables

你能用HDFView打开
myfile.h5
并查看数据吗?或者,您是否尝试过使用
h5dump
工具读取文件?它是来自HDF组的命令行实用程序。这是另一种看你拥有什么的方式。您还可以尝试使用
pytables
命令行工具
ptdump
。这些可能有助于查明问题。当我用
h5py
打开它时,我得到了钥匙['pd']。这有4个键:
ptdump
将组结构和数据集格式转储到命令窗口(或重定向到文本文件)。如果没有错误,这是一个好的开始。您是否看到一些
Vlarray
中列出的数据
h5py
是访问HDF5数据的不同方法。它使用类似于字典的方法,其中键是顶级节点名,值是对象(组或数据集)。这样做的目的是验证有效的
HDF5
文件,以便您可以专注于自己的代码。对于我来说,numpy
1.15
和python 3.6仍然存在这个问题。python 3.5或3.7解决了这个问题。我使用的是蟒蛇环境。使用
conda forge
频道。此错误在numpy 1.15中消失。但是新的错误出现在“没有名为”numpy.core._multiarray_umath“@YueDeng”的模块上。这可能是因为hdf文件是用numpy 1.16保存的。在这种情况下,即使您降级,它也不起作用。尝试降级numpy并使用1.15再次保存hdf文件。然后它就可以工作了。我正在使用
python3.6
并将
pytables
升级到
3.5.1
,以使事情正常工作;不必重新编写HDF文件如果您在google colab上运行,请不要忘记重新启动运行时