2014-06-12 41 views
0

我試圖寫一個函數,它執行以下操作減去一個大熊貓數據幀列的值:類型錯誤:不支持的操作類型時,試圖從另一個

  1. 發現了大熊貓列的平均值。
  2. 將此值放入新列。
  3. 查找月份平均值(即所有四元合併的平均值)
  4. 從年平均值中減去月份平均值,並將此值放入新列(月份效果)中。
  5. 將「月效應」列中的值添加到包含建模預測的現有列中。

DataFrame索引爲datetime。下面的代碼拋出一個TypeError:unsupported operand type(s) for -: 'instancemethod' and 'float',但我不知道爲什麼。跟蹤在代碼下面。有人可以提出解決辦法嗎?

def get_RIM2(df,obs, rim): 
    """df, observation, modelled value""" 
    a= obs.mean #mean of whole dataset 
    b= obs.median #median of whole dataset 
    df.insert(len(df.columns), 'Mean', a) 
    df.insert(len(df.columns), 'Median', b) 
    g = obs.groupby(pd.TimeGrouper('M')) 
    h = obs.groupby(pd.TimeGrouper('M')) 
    g.transform('mean') # mean for each month 
    h.transform('median') # median for each month 
    df['Mmean'] = df['Mean'] - g.transform('mean') # month effect 
    df['Mmedian'] = df['Median'] - h.transform('median') # month effect 
    df['RIMs2a'] = rim + df['Mmean'] 
    df['RIMs2b'] = rim + df['Mmedian'] 
    return df 

get_RIM2(sve_DOC, sve_DOC['DOC_mg/L'], sve_DOC['RIMsDOC']) 

錯誤:

--------------------------------------------------------------------------- 
TypeError         Traceback (most recent call last) 
<ipython-input-69-249d56b28c7a> in <module>() 
    14  return df 
    15 
---> 16 get_RIM2(sve_DOC, sve_DOC['DOC_mg/L'], sve_DOC['RIMsDOC']) 
    17 get_RIM2(svv_DOC, svv_DOC['DOC_mg/L'], svv_DOC['RIMsDOC']) 
    18 get_RIM2(svw_DOC, svw_DOC['DOC_mg/L'], svw_DOC['RIMsDOC']) 

<ipython-input-69-249d56b28c7a> in get_RIM2(df, obs, rim) 
     8  g.transform('mean') # mean for each month 
     9  h.transform('median') # median for each month 
---> 10  df['Mmean'] = df['Mean'] - g.transform('mean') 
    11  df['Mmedian'] = df['Median'] - h.transform('median') 
    12  df['RIMs2a'] = rim + df['Mmean'] 

C:\Users\AppData\Local\Enthought\Canopy32\User\lib\site-packages\pandas\core\ops.pyc in wrapper(left, right, name) 
    495      rvalues = com.take_1d(rvalues, ridx) 
    496 
--> 497    arr = na_op(lvalues, rvalues) 
    498 
    499    return left._constructor(wrap_results(arr), index=index, 

C:\Users\AppData\Local\Enthought\Canopy32\User\lib\site-packages\pandas\core\ops.pyc in na_op(x, y) 
    449     result = np.empty(x.size, dtype=dtype) 
    450     mask = notnull(x) & notnull(y) 
--> 451     result[mask] = op(x[mask], y[mask]) 
    452    else: 
    453     result = pa.empty(len(x), dtype=x.dtype) 

TypeError: unsupported operand type(s) for -: 'instancemethod' and 'float' 

回答

1

你需要你的初始平均/中位數電話之後的括號(如下) - 否則你將功能分配到數據幀,而不是值返回

a= obs.mean() #mean of whole dataset 
b= obs.median() #median of whole dataset 
相關問題