pd.read_hdf throws 'cannot set WRITABLE flag to True of this array'

Posted

技术标签:

【中文标题】pd.read_hdf throws \'cannot set WRITABLE flag to True of this array\'【英文标题】:pd.read_hdf throws 'cannot set WRITABLE flag to True of this array'pd.read_hdf throws 'cannot set WRITABLE flag to True of this array' 【发布时间】:2019-06-10 03:03:00 【问题描述】:

运行时

pd.read_hdf('myfile.h5')

我收到以下回溯错误:

[[...一些更长的回溯]]

~/.local/lib/python3.6/site-packages/pandas/io/pytables.py 在 read_array(self, key, start, stop) 2487 2488 if isinstance(节点,tables.VLArray): -> 2489 ret = node[0][start:stop] 2490 else: 2491 dtype = getattr(attrs, 'value_type', None)

~/.local/lib/python3.6/site-packages/tables/vlarray.py 在 getitem(自我,钥匙)

~/.local/lib/python3.6/site-packages/tables/vlarray.py in read(self, 开始,停止,步骤)

tables/hdf5extension.pyx in tables.hdf5extension.VLArray._read_array()

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

不知道发生了什么。我已经尝试重新安装tablespandas 基本上所有内容,但不想阅读。

【问题讨论】:

你能用 HDFView 打开myfile.h5 并查看数据吗?或者,您是否尝试过使用h5dump 工具读取文件?它是来自 HDF Group 的命令行实用程序。这是查看您拥有的东西的另一种方式。你也可以试试pytables 命令行工具ptdump。这些可能有助于查明问题。 当我用h5py 打开它时,我得到了密钥 ['pd']。这有 4 个键:<KeysViewHDF5 ['axis0', 'axis1', 'block0_items', 'block0_values']> ptdump 将组结构和数据集格式转储到命令窗口(或重定向到文本文件)。如果没有错误,这是一个好的开始。您是否看到一些VLArrays 与数据一起列出? h5py 是访问 HDF5 数据的另一种方法。它使用类似字典的方法,其中键是您的***节点名称,值是对象(组或数据集)。这样做的目的是验证有效的 HDF5 文件,以便您可以专注于您的代码。 【参考方案1】:

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

pip install --upgrade tables

【讨论】:

如果你在google colab上运行,别忘了重启运行时【参考方案2】:

似乎time-date 字符串导致了问题,当我将这些从文本转换为numpy (pd.to_datetime()) 并存储表时,问题就消失了,所以也许它与文本数据有关?

【讨论】:

【参考方案3】:

您使用的是 numpy 1.16 吗?它与最新版本的 pytables 不兼容(参见https://github.com/PyTables/PyTables/blob/v3.4.4/tables/hdf5extension.pyx#L2155)但 pytables 团队尚未发布固定版本:https://github.com/PyTables/PyTables/issues/719

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

【讨论】:

使用 numpy 1.15 和 python 3.6 对我来说问题仍然存在。这个问题在 python 3.5 或 3.7 中消失了。我正在使用 anaconda 环境。与conda-forge 频道。 这个错误在 numpy 1.15 中消失了。但是新错误带有“没有名为 'numpy.core._multiarray_umath' 的模块” @YueDeng 这可能是因为 hdf 文件是用 numpy 1.16 保存的。在这种情况下,即使您降级它也不起作用。尝试降级 numpy 并使用 1.15 再次保存 hdf 文件。然后它会工作。 并降级到 Python 3.5 我正在使用 Python 3.6 并将 pytables 升级到 3.5.1 以使事情正常进行;不必重新编写 HDF 存档

以上是关于pd.read_hdf throws 'cannot set WRITABLE flag to True of this array'的主要内容,如果未能解决你的问题,请参考以下文章

使用 pandas 读取 hdf5 数据集

hdf5 文件到熊猫数据框

When allowCredentials is true, allowedOrigins cannot contain the special value “*“ since that canno

Flutter: Upload Image Unhandled Exception: PlatformException(firebase_storage, The storage Uri canno

RMAN-05537: DUPLICATE without TARGET connection when auxiliary instance is started with spfile canno

Invalid package name:a digit canno be the first character in a package segme