当我将数据追加到列时,数据未“粘贴”到我的DataFrame

时间:2018-08-01 20:44:15

标签: python pandas dataframe

我对编程和数据科学还很陌生。我遇到了一个奇怪的问题。我正在对一个充满电影信息的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。还有其他差异。例如:

values don't match up

won't sum correctly

当在新的DataFrame中时,我无法获得新的ActorAvg列来重现6344793.712。

我知道这很复杂,并且不确定自己是否能很好地解释它,但是有人可以帮助我将此信息“粘贴”吗?

1 个答案:

答案 0 :(得分:0)

使用df.loc[row_index, col_name] = value。否则,您将为数据帧的一个切片分配一个值。更多信息:https://www.dataquest.io/blog/settingwithcopywarning/