как дать to_excel() в Pandas аргумент, который изменяется внутри цикла?

#python #pandas #dataframe #data-science #export-to-excel

Вопрос:

Привет, мои коллеги-любители данных.

Это мой первый вопрос в истории, поэтому я постараюсь быть предельно внимательным.

Сегодня я пытаюсь превратить серию больших документов Excel с большим количеством листов в один гигантский набор данных, а также внести некоторые изменения в способ отображения данных. чтобы быть ясным, я имею дело с сотнями листов, поэтому я ищу способы оптимизации решения.

В частности, у меня есть список названий таблиц данных, которые мне нужно извлечь из большой электронной таблицы Excel. Затем я пытаюсь повторить этот список и сохранить отредактированный список в виде нового файла в папке в моем блокноте jupyter.

Вот что я хотел бы, чтобы произошло:

 list_of_tables = [a,b,c,d,e]
for i in range (0, len(list_of_tables):
      df = pd.read_excel (r'Large_dataset_X.xlsx', sheet_name=list_of_tables[i])

      {Bunch of code formatting and editing the file}

      arg = "r'Edited Tables/"   list_of_tables[i]   "_Table_New.xlsx'"
      df.to_excel(arg, sheet_name= list_of_tables[i], index = False)
 

Проблема в том, что, когда я выполняю этот цикл, аргумент to_excel (), содержащий путь, выдает ошибку: «движок не может распознать файлы .xlsx».

 Error Traceback:

---------------------------------------------------------------------------
OptionError                               Traceback (most recent call last)
~anaconda3libsite-packagespandasioexcel_base.py in __new__(cls, path, engine, **kwargs)
    632                 try:
--> 633                     engine = config.get_option(f"io.excel.{ext}.writer")
    634                     if engine == "auto":

~anaconda3libsite-packagespandas_configconfig.py in __call__(self, *args, **kwds)
    232     def __call__(self, *args, **kwds):
--> 233         return self.__func__(*args, **kwds)
    234 

~anaconda3libsite-packagespandas_configconfig.py in _get_option(pat, silent)
    104 def _get_option(pat: str, silent: bool = False):
--> 105     key = _get_single_key(pat, silent)
    106 

~anaconda3libsite-packagespandas_configconfig.py in _get_single_key(pat, silent)
     90             _warn_if_deprecated(pat)
---> 91         raise OptionError(f"No such keys(s): {repr(pat)}")
     92     if len(keys) > 1:

OptionError: 'No such keys(s): "io.excel.xlsx'.writer"'

The above exception was the direct cause of the following exception:

ValueError                                Traceback (most recent call last)
<ipython-input-24-ec2db8d02335> in <module>
      1 arg = "r'Edited Tables/"   list_of_tables[key]   "_Table_New.xlsx'"
      2 # print(arg)
----> 3 df.to_excel(arg, sheet_name= list_of_tables[key], index = False)

~anaconda3libsite-packagespandascoregeneric.py in to_excel(self, excel_writer, sheet_name, na_rep, float_format, columns, header, index, index_label, startrow, startcol, engine, merge_cells, encoding, inf_rep, verbose, freeze_panes)
   2024             inf_rep=inf_rep,
   2025         )
-> 2026         formatter.write(
   2027             excel_writer,
   2028             sheet_name=sheet_name,

~anaconda3libsite-packagespandasioformatsexcel.py in write(self, writer, sheet_name, startrow, startcol, freeze_panes, engine)
    728             need_save = False
    729         else:
--> 730             writer = ExcelWriter(stringify_path(writer), engine=engine)
    731             need_save = True
    732 

~anaconda3libsite-packagespandasioexcel_base.py in __new__(cls, path, engine, **kwargs)
    635                         engine = _get_default_writer(ext)
    636                 except KeyError as err:
--> 637                     raise ValueError(f"No engine for filetype: '{ext}'") from err
    638             cls = get_writer(engine)
    639 

ValueError: No engine for filetype: 'xlsx''
 

Я попытался переключиться на формат csv, но ошибка не исчезла. Не знаю, что происходит не так. Спасибо!

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

1. Пожалуйста, предоставьте полную информацию об ошибке.

2. Есть ли у вас необходимые библиотеки для написания файла excel, такого как xlrd или openpyxl?

3. xlrd перестал поддерживать xlsx файлы. Интересно, это все? Какую версию Pandas и xlrd вы используете?

4. @It_is_Chris только что сделал

5. @Zev и альпарслан, может быть, глупый вопрос, но как мне проверить свои зависимости и их версии в записной книжке jupyter?

Ответ №1:

В строке arg = "r'Edited Tables/" list_of_tables[i] "_Table_New.xlsx'" у вас есть дополнительный апостроф в конце.

Измените это на:

 arg = r"Edited Tables/"   list_of_tables[i]   "_Table_New.xlsx"
 

Обратите внимание, что в сообщении об ошибке говорится ValueError: No engine for filetype: 'xlsx'' , что он не знает, как обрабатывать xlsx' файл, но его можно было бы использовать xlsx без завершающего апострофа.

У "r'Edited Tables/" этой части также есть аналогичная проблема.