Не удается прочитать файл HDF при использовании xlwings — для HDFStore требуются PyTables

#python #pandas #pytables #xlwings

#python #панды #питаблы #xlвинги #pandas #pytables #xlwings

Вопрос:

Я пытаюсь создать различные UDF-файлы Excel на python с помощью xlwings. Мои UDF-файлы основаны на значениях, извлеченных из файла HDF. Однако каждый раз, когда я нажимаю кнопку «Импортировать функции» в Excel, я получаю сообщение об ошибке. Ниже приведен пример.

 import pandas as pd
import numpy as np
import xlwings as xw

matrix1 = pd.DataFrame(np.random.random(size = (1000, 1000)))
matrix2 = pd.DataFrame(np.random.random(size = (1000, 100)))

matrix1.to_hdf('matrix.h5', key = 'mat1', mode = 'w')
matrix2.to_hdf('matrix.h5', key = 'mat2', mode = 'a')

arg = pd.read_hdf('matrix.h5', key = 'mat2', mode = 'r')

@xw.func
def dummy(x, y):
   return 17
  

Когда я нажимаю на кнопку «Импортировать функции» на ленте xlwings в Excel, я получаю следующее

Сообщение об ошибке

Если я попытаюсь запустить программу с помощью Spyder, у меня не возникнет проблем, и я смогу сгенерировать файлы HDF просто отлично.

Интересно, что если я удалю строки, в которых я записываю файл HDF, и просто оставлю ту, в которой я его прочитал, я получу сообщение об ошибке

 FileNotFoundError: File matrix.h5 does not exist ...
  

Хотя я подтвердил, что файл действительно существует. Если я запускаю тот же код в Spyder, у меня не возникает проблем, он работает нормально.

Есть ли какая-то проблема с совместимостью с файлами xlwings и HDF, или я что-то упускаю?

Ответ №1:

Не вижу, чтобы xlwings использовался для чего-либо в примерах. Однако верно, что PyTables требуются. Попробуйте запустить pip install tables для его установки.

Комментарии:

1. К сожалению, это не решает проблему. Когда я запускаю, pip install tables я получаю несколько строк, в которых говорится, Requirement already satisfied что наводит меня на мысль, что он уже установлен. У меня нет проблем с запуском файлов в моей IDE, но когда я пытаюсь загрузить функции в Excel через «Импорт функций», я получаю сообщение об ошибке.