2015-08-21 2 views
0

У меня есть столбец в моем файле csv, называемый «спорт», содержащий разные названия видов спорта. Я пытаюсь присвоить им оценку популярности. Но когда я набираю следующее (я использую Python), я получаю ошибку продолжения.SyntaxError: недействительный Синтаксис с использованием функции .tolist() в python при назначении значений столбцам

Sports_Popularity_Score = [9 if sport=='football' else 7 if sport=='hockey' 
else 6 if sport=='basketball' else 5 if sport=='baseball' else 4 if sport=='tennis' else 3 if sport=='gymnastics' else 2 if sport=='olympics' else 1 for sport df['sport'].tolist()] 

Сообщение об ошибке: Файл "sport_popularity.py", строка 74

Sports_Popularity_Score = [9 if sport=='football' else 7 if sport=='hockey' 
else 6 if sport=='basketball' else 5 if sport=='baseball' else 4 if sport=='tennis' else 3 if sport=='gymnastics' else 2 if sport=='olympics' else 1 for sport df['sport'].tolist()] 

^ 

SyntaxError: invalid syntax 

Есть ли что-то не так с тем, как я отформатировал ф.р. раздел? Название столбца - спорт, а значение в каждой ячейке - строка: футбол, хоккей и т. Д. Спасибо за любую помощь!

+1

Не используйте вложенный тройной подобный. –

+0

что вы делаете со значениями, я полагаю, вы используете панды, так что, скорее всего, гораздо лучший способ сделать то, что вы хотите –

+0

Mystery upvoter: Каким образом этот вопрос «полезен и понятен»? Как это демонстрирует исследовательские усилия? В каком смысле это будет полезно для будущих посетителей сайта? –

ответ

0

Вы пропускаете in:

for sport in df['sport'].tolist() 
     ^

Я также рекомендовал бы другой подход, ошибку трудно определить, поскольку код не очень читаемый.

+0

спасибо. который решил это. В следующий раз я напишу код более четко. – vuxxx036

+0

@ vuxxx036, не стоит беспокоиться, требуется некоторое время, чтобы привыкнуть к форматированию –

1

Вы пропустили «в»

Кроме того, это та вещь, вы должны делать с Dict:

popularities = {'football': 9, 'hockey': 7, <etc...>} 
sports_popularity_score = [popularities[sport] for sport in df['sport'].tolist()] 
+0

Вместо 'popularities [sport]', я бы сделал 'popularities.get (sport, 1)'.Обратите внимание на 'else' в оригинале, подразумевая, что данный« спорт »не может быть в словаре, и любой вид спорта, не входящий в список, имеет популярность по умолчанию 1. – TigerhawkT3

+0

Спасибо. который решил это. И я буду использовать ваш стиль в следующий раз. – vuxxx036

+0

@ vuxxx036 - Обратите внимание, что этот ответ приведет к ошибке, если вы попытаетесь пройти спорт, которого нет в словаре, вместо того, чтобы просто присваивать ему популярность 1. Мой вышеизложенный комментарий исправляет это. – TigerhawkT3