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

创建于 2019-01-19  ·  16评论  ·  资料来源: pandas-dev/pandas

修复此问题后,需要在以下位置还原xfail装饰器: https :

代码示例,可能的复制示例

我突然收到这个错误,知道吗?

# Your code here
 input_df = pd.read_hdf(path_or_buf='x.hdf5',key='/x',mode='r')

问题描述

追溯 :
` Traceback (most recent call last): File "...", line 115, in <module> input_df = pd.read_hdf(path_or_buf='x.hdf5',key='/x',mode='r') File "/usr/local/lib/python3.6/dist-packages/pandas/io/pytables.py", line 394, in read_hdf return store.select(key, auto_close=auto_close, **kwargs) File "/usr/local/lib/python3.6/dist-packages/pandas/io/pytables.py", line 741, in select return it.get_result() File "/usr/local/lib/python3.6/dist-packages/pandas/io/pytables.py", line 1483, in get_result results = self.func(self.start, self.stop, where) File "/usr/local/lib/python3.6/dist-packages/pandas/io/pytables.py", line 734, in func columns=columns) File "/usr/local/lib/python3.6/dist-packages/pandas/io/pytables.py", line 2937, in read start=_start, stop=_stop) File "/usr/local/lib/python3.6/dist-packages/pandas/io/pytables.py", line 2489, in read_array ret = node[0][start:stop] File "/usr/local/lib/python3.6/dist-packages/tables/vlarray.py", line 681, in __getitem__ return self.read(start, stop, step)[0] File "/usr/local/lib/python3.6/dist-packages/tables/vlarray.py", line 821, in read listarr = self._read_array(start, stop, step) File "tables/hdf5extension.pyx", line 2155, in tables.hdf5extension.VLArray._read_array ValueError: cannot set WRITEABLE flag to True of this array

Bug Dependencies IO HDF5

最有用的评论

使用numpy = 1.16.0时,出现此错误,当我将numpy = 1.15.4降级时,问题消失了

所有16条评论

@ macd2 :感谢您举报! 有两件事:

  • 在本期中,您可以从pandas.show_versions提供您的环境信息吗?
  • 假设可以,您是否愿意共享触发此错误的文件?

我突然收到这个错误,知道吗?

  • 听起来这在pandas早期版本上为您工作。 该代码什么时候才对您有效? 您现在使用的是哪个版本(与第一个问题有关)?

cc @jreback

使用numpy = 1.16.0时,出现此错误,当我将numpy = 1.15.4降级时,问题消失了

@gfyoung当然这里是版本:
pandas.show_versions
'依赖关系':
{'pandas':'0.23.4','pytest':'3.4.0','pip':'18 .1','setuptools':'40 .6.3','Cython':'0.29.3',' numpy':'1.16.0','scipy':'1.2.0','pyarrow':无,'xarray':无,'IPython':'6.5.0','sphinx':无,'patsy' :'0.5.0','dateutil':'2.7.5','pytz':'2018.7','blosc':无,'bottleneck':'1.2.1','tables':'3.4.4' ,'numexpr':'2.6.8','feather':无,'matplotlib':'3.0.2','openpyxl':'2.5.12','xlrd':'1.1.0','xlwt' :'1.3.0','xlsxwriter':'0.7.3','lxml':'4.1.1','bs4':'4.4.1','html5lib':'1.0b8','sqlalchemy': '1.2.15','pymysql':'0.9.2','psycopg2':'2.7.6.1(dt dec pq3 ext lo64)','jinja2':'2.10','s3fs':无,'fastparquet' :无,'pandas_gbq':无,'pandas_datareader':'0.7.0'}

```

不幸的是,我无法共享文件,但是我认为问题确实来自numpy,因为@vvvlc表示这是其git上的另一个问题:

https://github.com/nipy/nibabel/issues/697

PS: just downgraded to numpy=1.15.4 and indeed it resolves the issue

同时,熊猫有什么可以做的? 或者只是等待下一个
pytables发布?

在2019年1月21日星期一5:34 AM macd2 [email protected]写道:

@gfyoung https://github.com/gfyoung确保这里是版本:

'依赖关系':
{'pandas':'0.23.4','pytest':'3.4.0','pip':'18 .1','setuptools':'40 .6.3','Cython':'0.29.3',' numpy':'1.16.0','scipy':'1.2.0','pyarrow':无,'xarray':无,'IPython':'6.5.0','sphinx':无,'patsy' :'0.5.0','dateutil':'2.7.5','pytz':'2018.7','blosc':无,'bottleneck':'1.2.1','tables':'3.4.4' ,'numexpr':'2.6.8','feather':无,'matplotlib':'3.0.2','openpyxl':'2.5.12','xlrd':'1.1.0','xlwt' :'1.3.0','xlsxwriter':'0.7.3','lxml':'4.1.1','bs4':'4.4.1','html5lib':'1.0b8','sqlalchemy': '1.2.15','pymysql':'0.9.2','psycopg2':'2.7.6.1(dt dec pq3 ext lo64)','jinja2':'2.10','s3fs':无,'fastparquet' :无,'pandas_gbq':无,'pandas_datareader':'0.7.0'}

不幸的是我无法共享文件,但我认为问题确实来了
来自numpy的@vvvlc https://github.com/vvvlc说这是另一个
在他们的git上发布:

nipy / nibabel#697 https://github.com/nipy/nibabel/issues/697

-
您收到此消息是因为您已订阅此线程。
直接回复此电子邮件,在GitHub上查看
https://github.com/pandas-dev/pandas/issues/24839#issuecomment-456043488
或使线程静音
https://github.com/notifications/unsubscribe-auth/ABQHIqiIyuE-lmMlN2Ep-4htyMrTBdefks5vFaWqgaJpZM4aJQqs

对我来说, pip install numpy==1.15.4也可以解决此问题。

@TomAugspurger这个问题首先出现在Google上(至少对我来说是这样),而且似乎很简单,所以仅等待上游修复就足够了。 你会问真的很棒:)

pip3 install numpy==1.15.4也为我解决了。

但是,当我降级numpy时,我一直收到此错误ImportError: No module named 'numpy.core._multiarray_umath' 。 最终弄清楚了这是因为我将.h5文件存储为已安装numpy 1.16,并且不会随着降级的numpy重新打开...

您可以避免该错误:
ValueError: cannot set WRITEABLE flag to True of this array
当您使用熊猫保存数据时,将format='table'传递给HDFStore.appendHDFStore.put

这可能会解决您的问题,并通过pandas 0.24和numpy 1.16+测试

@ dev72
好的,但是已经存在的旧HDF文件呢?

我认为读取旧的hdf文件的最好方法是降级您的pandas + numpy版本,读取所有数据,然后使用format='table'将其写入新的hdf存储中。
然后,它应该可以使用较新的numpy和pandas版本。

@ dev72是的,我在同一点上是正确的,但我宁愿坚持降级直到正确解决此问题

是的,同样来自Google,感谢您提交此问题@ macd2

因此,在追逐一些在numpyPyTables提交的问题后, PyTables master中修复,但尚未在发行版中解决。

https://github.com/PyTables/PyTables/issues/719#issuecomment -455612656

有人尝试过使用PyTables master w / numpy >= 0.16吗?

我使用它来工作

HDF5_DIR={HDF5_PATH} pip install -e git+https://github.com/PyTables/PyTables@492ee2f#egg=tables
pip install numpy==1.16.0

确保已安装cython和hdf5。

哪些版本的pytables和numpy复制了此内容? 它特定于数据吗?

pandas: 0.24.1
numpy: 1.16.2
tables: 3.4.4

这不会提高,

In [8]: df = pd.DataFrame({"A": [1, 2]})

In [9]: df.to_hdf('x.hdf5', key='x')

In [10]: pd.read_hdf('x.hdf5', 'x', mode='r')
Out[10]:
   A
0  1
1  2

仅供参考,Pytables 3.5.0和3.5.1在PyPI上,并具有pytables方面的修复功能。

升级到pytables 3.5.1也会用numpy 1.16.2为我解决问题

处理tf 2.0.0需要numpy(至少)1.16.0。 将numpy降级到以前的版本在tf 2.0.0上不起作用

此页面是否有帮助?
0 / 5 - 0 等级