IndexError: индекс замены 1 вне диапазона для кортежа позиционных аргументов

Я следую руководству и не знаю, почему у меня возникла эта ошибка:

    <ipython-input-61-d59f7a5a07ab> in extract_featuresets(ticker)
      2     tickers, df = process_data_for_labels(ticker)
      3     df['{}_target'.format(ticker)] = list(map(buy_sell_hold,
----> 4                                              df['{}_{}1d'.format(ticker)],
      5                                              df['{}_{}2d'.format(ticker)],
      6                                              df['{}_{}3d'.format(ticker)],

IndexError: Replacement index 1 out of range for positional args tuple

Вот мой код:

tickers, df = process_data_for_labels(ticker)
df['{}_target'.format(ticker)] = list(map(buy_sell_hold,
                                         df['{}_{}1d'.format(ticker)],
                                         df['{}_{}2d'.format(ticker)],
                                         df['{}_{}3d'.format(ticker)],
                                         df['{}_{}4d'.format(ticker)],
                                         df['{}_{}5d'.format(ticker)],
                                         df['{}_{}6d'.format(ticker)],
                                         df['{}_{}7d'.format(ticker)],))

Вот ссылка на руководство: https://www.youtube.com/watch?v=zPp80YM2v7k


person balexander1    schedule 30.08.2020    source источник
comment
ticker должен быть двухэлементным кортежем, потому что в строке формата есть два заполнителя. Это?   -  person DYZ    schedule 30.08.2020
comment
вы должны вызывать tickers вместо _2 _... обратите внимание, что предыдущая строка распаковывает только один элемент '{}_target'.format(ticker)   -  person RichieV    schedule 30.08.2020


Ответы (2)


Строке формата требуется два аргумента в format, в то время как вы передаете только один ticker в качестве аргумента.

Если ticker - это список или кортеж из двух элементов, вы можете сделать это:

df['{}_{}1d'.format(*ticker)]

В противном случае уберите одну фигурную скобку:

df['{}_1d'.format(ticker)]
person fusion    schedule 30.08.2020
comment
В Python * используется для распаковки итераций (см. Что такое питонический способ распаковывать кортежи?) - person Aniket Deshpande; 19.02.2021

Если вы хотите такое же значение в { } из

df['{ }_{ }1d'.format(*ticker)]

Попробуйте вот так:

df['{0}_{0}1d'.format(*ticker)]

Я решил свою проблему аналогично вашей.

person LeeYongBlood    schedule 11.01.2021