2016-04-03 80 views
4

我從財務書python下面的代碼。但是來自numpy的循環函數會導致一個錯誤,如「返回圓形(小數點後出) TypeError:round()最多2個參數(給出3)」python numpy round函數奇怪的錯誤

任何人都知道我在做什麼錯?

import numpy as np 
import pandas as pd 
import pandas.io.data as web 

sp500 = web.DataReader('^GSPC', data_source='yahoo', 
          start='1/1/2000', end='4/14/2014') 
sp500.info() 
sp500['Close'].plot(grid=True, figsize=(8, 5)) 

sp500['42d'] = np.round(pd.rolling_mean(sp500['Close'], window=42), 2) 
+0

您使用哪個版本的熊貓? – Alexander

+0

它給我的作品,給2個地方。更重要的是,你只能提供2個參數,相當正確。 – roadrunner66

+0

也爲我工作。 – Hun

回答

3

基於錯誤信息,似乎在numpy 1.11.0,取整函數如下所示:

try: 
    round = a.round 
except AttributeError: 
    return _wrapit(a, 'round', decimals, out) 
return round(decimals, out) 

它看起來像pandas.Series.round只需要兩個參數(selfprecision),但numpy是傳遞給它一個額外的參數,out。推測這可能是pandasnumpy中的錯誤或API更改。

我可以看到兩種簡單的解決方法。第一種方法是隻需直接使用Series.round()功能:

sp500['42d'] = pd.rolling_mean(sp500['Close'], window=42).round(2) 

另一種選擇是隻適用numpy.round功能與底層numpy的數組:

sp500['42d'] = np.round(pd.rolling_mean(sp500['Close'], window=42).values, 2) 

編輯:看起來這是一個已知問題。請參閱the pandas github tracker, issue #12644