我对编程和数据科学还很陌生。我遇到了一个奇怪的问题。我正在对一个充满电影信息的DataFrame进行功能设计。我将每部电影的演员计数向量化,并且我正在预测元得分。
最初,我还尝试用一系列列表的每个成员的总得分替换Actors列。例如,如果在电影中列出了四个人,我将使用下面的代码取其平均Metascore(他们自己的平均Metascore)并取其平均值。有些演员没有值,有些电影可能没有演员,所以如果遇到这些问题,我只会使用annp.nan(稍后,我将其更改为666.666以方便删除)。
起初,这似乎奏效了。它为我提供了更好的模型(尽管仅当我仍然将矢量列于Actors列时)。但这可能是a幸。我注意到某些数据看起来很奇怪。因此,我尝试重现该问题。
对于此代码: 演员是一列列表,每个列表都有四个演员名称。 actors_df是一个由两列组成的DataFrame,一个是演员名称,另一个是相应的平均Metacritic得分之一。 morta_list只是一个列表,因此我可以跟踪发生了什么。
morta = df.dropna(axis=0, how='any', subset=['Metascore', 'imdbID']).copy()
morta['ActorAvg'] = 0.
morta_list = []
for index, m in enumerate(morta.Actors):
s=0
den = 0
for p in m:
for n in zip(actors_df.name.values, actors_df.avgscore):
if p.lower() == n[0]:
s = s + n[1]
den = den + 1
if den == 0:
morta.ActorAvg[index]=666.666
morta_list.append(666.666)
else:
morta.ActorAvg[index]=s/den
morta_list.append(s/den)
但是,稍后,当我检查新列时,却得到了奇怪的结果:
morta['ActorAvg'].sum()
给我6344793.712,但是
morta[['ActorAvg']].sum()
给我0。还有其他差异。例如:
当在新的DataFrame中时,我无法获得新的ActorAvg列来重现6344793.712。
我知道这很复杂,并且不确定自己是否能很好地解释它,但是有人可以帮助我将此信息“粘贴”吗?
答案 0 :(得分:0)
使用df.loc[row_index, col_name] = value
。否则,您将为数据帧的一个切片分配一个值。更多信息:https://www.dataquest.io/blog/settingwithcopywarning/