Я ясно вижу определенный позиционный аргумент, так почему же он выдает мне эту ошибку?

#python #excel #pandas

#питон #превосходить #панды

Вопрос:

Я пытаюсь сжать свой формат файла. Я изменил заголовки, чтобы они соответствовали моей функции. Это работало ранее, но с этим новым файлом я получаю ошибку позиционного аргумента.

 input_fname = 'basic.xlsx' # input filename output_fname = 'basic-condensed.xlsx' # output filename basic_all = pd.read_excel(input_fname)  catalog_id_column = 'Product Number' price_columns = 'List Price' size_column = 'Size'  basic_all_condensed = condense_excel_multiprice(basic_all, price_columns, size_column)  writer = pd.ExcelWriter(output_fname,  engine='xlsxwriter',  options={'strings_to_urls': False})  gbio_abs_condensed.to_excel(writer, index=False, encoding='utf-8') writer.close()  

 TypeError Traceback (most recent call last) lt;ipython-input-146-614ba8c55380gt; in lt;modulegt;  22   23  ---gt; 24 basicbio_all_condensed = condense_excel_multiprice(basicbio_all, price_columns, size_column)  25   26 writer = pd.ExcelWriter(output_fname,  TypeError: condense_excel_multiprice() missing 1 required positional argument: 'size_column  

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

1. Какая строка генерирует ошибку?

2. извините, забыл указать ошибку

3. Извините, еще вопросы — Где определяется condense_excel_multiprice?

4. Это означает, что есть один аргумент, который вы не указали. Это не означает, что необходимо указать только один общий аргумент

5. Мы должны были бы ознакомиться с определением condense_excel_multiprice , чтобы посоветовать вам, но вы, скорее всего, обнаружите, что для этого требуется 4 параметра, а вы предоставляете 3.

Ответ №1:

То, что у вас есть вызванная переменная size_column , не означает, что она была передана в том же/правильном положении, которое ожидала подпись вашей функции.

Возьмем этот пример:

 def foo(x, y, ax=None):  return x   y  y = 1 foo(y)  

Это приводит к ошибке:

 --------------------------------------------------------------------------- TypeError Traceback (most recent call last) lt;ipython-input-3-cf0d9fb1194fgt; in lt;modulegt;  3   4 y = 1 ----gt; 5 foo(y)  TypeError: foo() missing 1 required positional argument: 'y'  

Это потому, что я передаю y как первый инструмент, к которому относится моя функция x . Несмотря на то , что я сдал y экзамен, мне все еще не хватает одного аргумента

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

1. О да, вы абсолютно правы, кто-то добавил дополнительный аргумент, которого я не заметил. Спасибо!

Ответ №2:

Вывод ошибки указывает на то, что для функции требуется 1 отсутствующий аргумент condense_excel_multiprice .

Вызов функции содержит локальные переменные basic_all, price_columns, size_column , но запрашивает size_column их, что наводит меня на мысль, что перед size_column предоставленным аргументом отсутствует требуемое значение. Проверьте это определение функции на наличие аргументов, необходимых для выполнения вызова функции.