Pd.read_hdf throws 'не может установить флаг WRITABLE в True для этого массива'

При беге

pd.read_hdf('myfile.h5')

Я получаю следующую ошибку трассировки:

[[...some longer traceback]]

~/.local/lib/python3.6/site-packages/pandas/io/pytables.py in read_array(self, key, start, stop) 2487 2488 if isinstance(node, 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 in getitem(self, key)

~/.local/lib/python3.6/site-packages/tables/vlarray.py in read(self, start, stop, step)

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

ValueError: cannot set WRITEABLE flag to True of this array

Понятия не имею, что происходит. Я пробовал переустановить tables, pandas все в основном, но читать не хочет.

Можете ли вы открыть myfile.h5 с помощью HDFView и просмотреть данные? Или вы пробовали читать файл с помощью инструмента h5dump? Это утилита командной строки от HDF Group. Это еще один способ увидеть, что у вас есть. Вы также можете попробовать инструмент командной строки pytablesptdump. Это может помочь выявить проблему.

kcw78 16.01.2019 16:00

Когда я открываю его с помощью h5py, я получаю ключ ['pd']. У этого есть 4 ключа: <KeysViewHDF5 ['axis0', 'axis1', 'block0_items', 'block0_values']>

Landmaster 17.01.2019 11:41
ptdump выгружает структуру группы и форматы наборов данных в командное окно (или перенаправляет в текстовый файл). Если ошибок нет, это хорошее начало. Вы видели список VLArrays с данными? h5py - это другой метод доступа к данным HDF5. Он использует метод, подобный словарю, где ключи - это имена ваших узлов верхнего уровня, а значения - это объекты (либо группа, либо набор данных). Цель этого - проверить действительный файл HDF5, чтобы вы могли сосредоточиться на своем коде.
kcw78 17.01.2019 14:50
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
26
3
14 462
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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. Я использую среду анаконды. с каналом conda-forge.

Fauzan 22.01.2019 10:42

Эта ошибка исчезла с numpy 1.15. Но новая ошибка связана с отсутствием модуля с именем numpy.core._multiarray_umath.

Yue Deng 23.01.2019 09:03

@YueDeng это вероятно потому, что hdf-файл был сохранен с помощью numpy 1.16. В этом случае это не сработает даже после перехода на более раннюю версию. Попробуйте понизить версию numpy и снова сохранить файл hdf с версией 1.15. Тогда все заработает.

Pekka 26.01.2019 13:08

И перейти на Python 3.5

Afe 25.02.2019 23:29

Я использую Python 3.6 и обновил pytables до 3.5.1, чтобы все заработало; не пришлось переписывать архив HDF

jeschwar 16.05.2019 23:12

Кажется, что строки time-date вызывали проблему, и когда я преобразовал их из текста в numpy (pd.to_datetime()) и сохранил таблицу, проблема исчезла, так что, возможно, это как-то связано с текстовыми данными?

Обновление PyTables до версии> 3.5.1 должно решить эту проблему.

pip install --upgrade tables

если вы работаете в Google Colab, не забудьте перезапустить среду выполнения

Ritwik 04.06.2020 11:59

Другие вопросы по теме