ImportError:无法导入名称“阶乘”

时间:2019-05-23 21:42:57

标签: python python-3.x statsmodels

我想使用logit模型并尝试导入statsmodels库。 我的版本:Python 3.6.8

我得到的最佳建议是降级scipy,但不清楚如何降级以及降级到哪个版本。请帮助解决。 https://github.com/statsmodels/statsmodels/issues/5747

import statsmodels.formula.api as smf

ImportError                               Traceback (most recent call last)
<ipython-input-52-f897a2d817de> in <module>
----> 1 import statsmodels.formula.api as smf

~/anaconda3/envs/py36/lib/python3.6/site-packages/statsmodels/formula/api.py in <module>
     13 from statsmodels.robust.robust_linear_model import RLM
     14 rlm = RLM.from_formula
---> 15 from statsmodels.discrete.discrete_model import MNLogit
     16 mnlogit = MNLogit.from_formula
     17 from statsmodels.discrete.discrete_model import Logit

~/anaconda3/envs/py36/lib/python3.6/site-packages/statsmodels/discrete/discrete_model.py in <module>
     43 
     44 from statsmodels.base.l1_slsqp import fit_l1_slsqp
---> 45 from statsmodels.distributions import genpoisson_p
     46 
     47 try:

~/anaconda3/envs/py36/lib/python3.6/site-packages/statsmodels/distributions/__init__.py in <module>
      1 from .empirical_distribution import ECDF, monotone_fn_inverter, StepFunction
----> 2 from .edgeworth import ExpandedNormal
      3 from .discrete import genpoisson_p, zipoisson, zigenpoisson, zinegbin

~/anaconda3/envs/py36/lib/python3.6/site-packages/statsmodels/distributions/edgeworth.py in <module>
      5 import numpy as np
      6 from numpy.polynomial.hermite_e import HermiteE
----> 7 from scipy.misc import factorial
      8 from scipy.stats import rv_continuous
      9 import scipy.special as special

ImportError: cannot import name 'factorial'```

6 个答案:

答案 0 :(得分:4)

感谢@ 9769953。

  1. pip3 uninstall statsmodels#确保删除旧版本
  2. pip3 install statsmodels==0.10.0rc2 --pre --user#安装statsmodels的候选版本
  3. 重新启动jupyter笔记本的内核

为我修复了它。
您可以使用pip3 list

检查版本

摘要:在终端中复制并运行以下内容:

pip3 uninstall statsmodels -y
pip3 install statsmodels==0.10.0rc2 --pre --user

并且不要忘记重新启动jupyter笔记本的内核:)

答案 1 :(得分:3)

this issue on statsmodels' github repo开始,解决方案似乎是将SciPy降级为1.2版(当前使用的版本为1.3)。
至少对我来说,SciPy 1.2在factorial包中具有scipy.misc功能。

你可以

python3.6 -m pip install scipy==1.2 --upgrade

如果您没有标准安装权限,请使用--user选项。

由于您正在使用Conda,因此您可能想避免使用点子。您也应该能够在Conda中固定scipy的版本,但是,如果您不打算在环境中添加任何其他软件包,只需使用pip版本。
当然,降级SciPy可能会在其他地方引起问题,但这很难预见,尤其是在不确切知道您已经安装了哪些其他软件包和依赖项的情况下。您只需要找出答案。手指不停地陷入依赖地狱(因为您已经在门口了)。


更令人好奇的是,自版本1.0起,scipy.misc.factorial已被弃用;应该使用scipy.special.factorial

但是,在1.2版中导入不会显示任何明确的警告,也不会使用它。这可能可以解释为什么statsmodels仍使用旧的导入。即将发布下一个statsmodels版本的修复程序。

答案 2 :(得分:3)

pip install statsmodels --upgrade 

对我有用吗

答案 3 :(得分:0)

我遇到了这个问题,因为我正在使用www.domainname.net is an alias for whispering-orangutan-d7h7k6icnz7lnatv0qdsptdd.herokudns.com. whispering-orangutan.herokudns.com has address 34.231.75.48 whispering-orangutan.herokudns.com has address 52.2.175.150 whispering-orangutan.herokudns.com has address 54.165.51.142 whispering-orangutan.herokudns.com has address 52.203.53.176 whispering-orangutan.herokudns.com has address 54.164.181.42 whispering-orangutan.herokudns.com has address 34.196.237.103 whispering-orangutan.herokudns.com has address 3.209.102.29 whispering-orangutan.herokudns.com has address 54.173.32.212 ,并且加载了www.domainname.net has address 23.217.***.*** www.domainname.net has address 23.202.***.*** www.domainname.net is an alias for www235.wixdns.net. www235.wixdns.net is an alias for balancer.wixdns.net. 版本。使用此处提供的指导,我降级到import math并禁用scipy 1.3软件包以解决该问题。 -E

答案 4 :(得分:0)

!pip install scipy==1.2  --user
import statsmodels.formula.api as sm
from statsmodels.formula.api import ols
from statsmodels.sandbox.regression.predstd import wls_prediction_std`

成功安装scipy 1.2之后,我仍然得到以下信息:

ImportError:无法从'scipy.misc'导入名称'factorial'

答案 5 :(得分:0)

我发现一个简单的修复方法是编辑.py文件。使用优势分析时,我得到了与OP相同的错误。将dominance.py文件编辑为具有from scipy.special import factorial并成功。我认为在from scipy.misc import factorial的statsmodel程序包代码中将from scipy.special import factorial行编辑为edgeworth.py会在这里完成相同的工作。