2016-04-03 79 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