Я работаю с набором данных из kaggle на NBA allstars (https://www.kaggle.com/fmejia21/nba-all-star-game-20002016) [ссылка для тех, кто хочет запустить его самостоятельно]. Набор данных выглядит следующим образом:
In [3]: df1.head(3)
Out[3]:
Year Player Pos ... Selection Type NBA Draft Status Nationality
0 2016 Stephen Curry G ... Western All-Star Fan Vote Selection 2009 Rnd 1 Pick 7 United States
1 2016 James Harden SG ... Western All-Star Fan Vote Selection 2009 Rnd 1 Pick 3 United States
2 2016 Kevin Durant SF ... Western All-Star Fan Vote Selection 2007 Rnd 1 Pick 2 United States
[3 rows x 9 columns]
Я пытаюсь захватить черновую позицию в столбце «Статус черновика NBA» и сохранить ее в другом столбце, поэтому я начинаю с проверки разделения :
In [4]: df1['NBA Draft Status'].str.split(' ')
Out[4]:
0 [2009, Rnd, 1, Pick, 7]
1 [2009, Rnd, 1, Pick, 3]
Так что это кажется достаточно простым; просто возьмите предмет в четвертой позиции. Если это выбор второго раунда, добавьте 30 к этому числу. Я использую это:
In [5]: positions = []
...: for draft in df1['NBA Draft Status']:
...: if 'Rnd 2' in draft:
...: position = draft.split(' ')[4]
...: position = int(position) + 30
...: positions.append(position)
...: else:
...: position = draft.split(' ')[4]
...: position = int(position)
...: positions.append(position)
, и он выдает ошибку индекса:
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-5-0946ed392ea2> in <module>
6 positions.append(position)
7 else:
----> 8 position = draft.split(' ')[4]
9 position = int(position)
10 positions.append(position)
IndexError: list index out of range
Хорошо ... теперь вот где вопрос; почему это вне диапазона? При попытке выяснить, в чем проблема, я обнаружил, что могу напечатать этот индекс, но по какой-либо причине не могу добавить его в пустой список. Это работает:
In [6]: for draft in df1['NBA Draft Status']:
...: print(draft.split(' ')[4])
...: break
...:
7
Может кто-нибудь объяснить мне, что происходит? Я знаю, что это довольно многословно, но я не знал, как еще передать проблему, не предоставив некоторого фона для набора данных.