4

嗨,我收到以下错误

“numpy.ndarray”对象不可调用

以下列方式进行计算时

rolling_means = pd.rolling_mean(prices,20,min_periods=20)`
rolling_std =  pd.rolling_std(prices, 20)`

#print rolling_means.head(20)
 upper_band = rolling_means + (rolling_std)* 2
 lower_band = rolling_means - (rolling_std)* 2

我不知道如何解决,有人可以指出我正确的方向....

4

3 回答 3

18

该错误TypeError: 'numpy.ndarray' object is not callable意味着您尝试将 numpy 数组作为函数调用。我们可以在 repl 中重现错误:

In [16]: import numpy as np

In [17]: np.array([1,2,3])()
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
/home/user/<ipython-input-17-1abf8f3c8162> in <module>()
----> 1 np.array([1,2,3])()

TypeError: 'numpy.ndarray' object is not callable

如果我们假设错误确实来自您发布的代码片段(您应该检查的东西),那么您必须在代码的前面重新分配pd.rolling_mean或分配给一个 numpy 数组。pd.rolling_std

我的意思是这样的:

In [1]: import numpy as np

In [2]: import pandas as pd

In [3]: pd.rolling_mean(np.array([1,2,3]), 20, min_periods=5) # Works
Out[3]: array([ nan,  nan,  nan])

In [4]: pd.rolling_mean = np.array([1,2,3])

In [5]: pd.rolling_mean(np.array([1,2,3]), 20, min_periods=5) # Doesn't work anymore...
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
/home/user/<ipython-input-5-f528129299b9> in <module>()
----> 1 pd.rolling_mean(np.array([1,2,3]), 20, min_periods=5) # Doesn't work anymore...

TypeError: 'numpy.ndarray' object is not callable

所以,基本上你需要搜索你的代码库的其余部分pd.rolling_mean = ...和/或pd.rolling_std = ...查看你可能在哪里覆盖了它们。


此外,如果您愿意,您可以reload(pd)在您的代码片段之前放入,这应该可以通过恢复pd您最初导入它的值来运行它,但我仍然强烈建议您尝试找到您可能重新分配的位置给定的功能。

于 2013-10-13T19:27:51.430 回答
0

我遇到了同样的问题并解决了。

关键是我的函数参数和变量具有相同的名称。 试着给他们起不同的名字。

于 2021-03-24T10:30:37.490 回答
0

对于在 2021 年遇到此问题的每个人,有时当您创建一个与您的函数之一同名的 numpy 变量时,您可能会遇到此问题,发生的情况是,python 没有调用函数,而是尝试将 numpy 数组作为函数调用,并且你得到错误,只需更改 numpy 变量的名称

于 2021-03-09T11:55:57.613 回答