无法使用scipy.stats

52

在导入scipy后,在脚本中使用scipy.stats时出现错误。

AttributeError: 'module' object has no attribute 'stats'

在脚本编辑器中,我可以在输入scipy后单击“stats”下拉菜单,在Python控制台中,我无法从下拉菜单中选择python.stats,它不在那里。我正在使用pandas 2.7和SciPy 0.13.0。为什么会这样?有任何已知问题吗?


6
你是否导入了统计模块,即from scipy import stats或者import scipy.stats。需要注意的是,使用import scipy并不能导入stats子模块,但是你的编辑器可能会自动为了TAB键自动导入它。 - Josef
"脚本编辑器"? "下拉菜单"? 你使用的是哪个编辑器?你是如何安装它的?你是如何安装Python的?在终端中,python -c "import scipy.stats"是否会出现错误?同时,请展示生成错误的代码以及导入scipy.stats的代码。 - Warren Weckesser
谢谢,使用import scipy.stats可以了。 - user3276418
3个回答

65

扩展我的评论(以列出答案)。

像许多其他大包一样,Scipy不会自动导入所有模块。如果我们想使用Scipy的子包,则需要直接导入它们。

但是,有些Scipy子包会加载其他Scipy子包,因此例如导入scipy.stats也会导入大量其他包。但我从不依赖于这一点来使子包在名称空间中可用。

在许多使用Scipy的软件包中,首选模式是导入子软件包以通过其名称使其可用,例如:

>>> from scipy import stats, optimize, interpolate


>>> import scipy
>>> scipy.stats
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'stats'
>>> scipy.optimize
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'optimize'

>>> import scipy.stats
>>> scipy.optimize
<module 'scipy.optimize' from 'C:\Python26\lib\site-packages\scipy\optimize\__init__.pyc'>

1
也许提一下从scipy导入的明确指南会很好:http://docs.scipy.org/doc/scipy/reference/api.html(这经常出现,而且在SO上有一个“规范”答案确实很好。) - ev-br
谢谢,这解释了观察到的行为。使用import.scipy.stats很顺利。 - user3276418

2
这是可以预料的。当你只执行import scipy时,大多数子包并没有被导入。有很多子包,其中有许多重量级扩展模块需要加载时间。你应该始终明确地导入想要使用的子包。

https://github.com/scipy/scipy/issues/13618


0
如果你只是像这样单独导入scipy:
import scipy

然后你使用:

scipy.stats

你将会获得:

AttributeError: module 'scipy' has no attribute 'stats'

你需要像这样导入:

import scipy.stats

或者

import scipy
import stats

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接