Python:Pandas Dataframe AttributeError:'numpy.ndarray'对象没有属性'fillna'

时间:2016-06-03 23:38:59

标签: python pandas dataframe attributeerror

由于我正在创建数据帧,因此我不明白为什么会出现数组错误。

M2 = df.groupby(['song_id', 'user_id']).rating.mean().unstack()
M2 = np.maximum(-1, (M - 3).fillna(0) / 2.)  # scale to -1..+1  (treat "0" scores as "1" scores)
M2.head(2)

AttributeError: 'numpy.ndarray' object has no attribute 'fillna'

3 个答案:

答案 0 :(得分:2)

您正在numpy数组上调用.fillna()方法。而且numpy数组没有定义该方法。

您可能可以将numpy数组转换为pandas.DataFrame,然后应用.fillna()方法。

答案 1 :(得分:0)

(M - 3)被解释为numpy.ndarray。这意味着M在某处被定义为numpy.ndarray。通过运行来测试它:

print type(M)

答案 2 :(得分:0)

您的代码目前尚未完成,因此很难确定M导致错误的原因。可能有几个原因:

  1. 您有拼写错误,(M - 3)应为(M2 - 3)

    M2 = df.groupby(['song_id', 'user_id']).rating.mean().unstack()
    M2 = np.maximum(-1, (M2 - 3).fillna(0) / 2.)  # scale to -1..+1  (treat "0" scores as "1" scores)
    M2.head(2)
    
  2. 您需要在代码中的其他位置定义/转换Mpandas.DataFrame

    # With out seeing this part of the code, no one can really help you
    M = pd.DataFrame(...)
    # ...
    # ...
    M2 = df.groupby(['song_id', 'user_id']).rating.mean().unstack()
    M2 = np.maximum(-1, (M - 3).fillna(0) / 2.)  # scale to -1..+1  (treat "0" scores as "1" scores)
    M2.head(2)
    
  3. 您可以在使用它之前将其转换为pandas.DataFrame

    M2 = df.groupby(['song_id', 'user_id']).rating.mean().unstack()
    M2 = np.maximum(-1, (pd.DataFrame(M) - 3).fillna(0) / 2.)  # scale to -1..+1  (treat "0" scores as "1" scores)
    M2.head(2)