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
不知道发生了什么。我已经尝试重新安装tables
、pandas
基本上所有内容,但不想阅读。
【问题讨论】:
你能用 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.
【讨论】:
使用 numpy1.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'的主要内容,如果未能解决你的问题,请参考以下文章
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