2015-08-21 96 views
0

我在我的csv文件中有一个名为'sport'的列,其中包含不同的体育名称。我试图给他们分配一个流行度。但是,当我输入以下内容(我正在使用Python)时,我得到了前进错误。SyntaxError:在python中使用.tolist()函数的语法无效,同时为列分配值

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 

是不是有什么毛病我格式化我的DF节的方式?列的名称是运动,每个单元格中的值是一个字符串:足球,曲棍球等。感谢您的帮助!

+1

不要使用嵌套三元这样。 –

+0

你在做什么值,我想你正在使用熊猫,所以最有可能是一个更好的方式来做你想做的事 –

+0

神秘upvoter:这个问题“有用和清晰”是什么方式?它如何展示研究成果?对于该网站的未来访问者来说,它有什么用处? –

回答

0

你缺少一个in

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

我也建议了不同的方法,错误是很难发现的代码不是很可读。

+0

谢谢。那解决了它。下次我会更清楚地发布代码。 – vuxxx036

+0

@ vuxxx036,不用担心,需要一段时间才能习惯格式化 –

1

你“中的”

也不翼而飞,这是你应该有一个字典做这样的事情:

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