You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

statsmodels InfeasibleTestError问题:代码在Python文件执行失败

解决statsmodels的InfeasibleTestError:移除全常量列

错误原因

报错statsmodels.tools.sm_exceptions.InfeasibleTestError: 输入的x值包含全常量列,无法计算检验统计量的核心原因是:格兰杰因果检验要求输入变量必须有取值波动,全常量列(所有行值完全相同)无法提供有效统计信息,导致检验无法执行。

问题分析

你代码里注释的移除常量列逻辑写反了——原来的df.loc[:, df.apply(pd.Series.nunique) == 1]是只保留全常量列,反而会加剧问题。另外Jupyter能运行大概率是因为缓存了之前处理过的数据集,而Python脚本每次重新读取原始Excel文件,直接暴露了数据里的常量列问题。

修复后的代码

@app.route('/gct',methods=['POST','GET'])
def gct():
    df = pd.read_excel('data.xlsx')
    nobs = -15
    
    # 移除所有全常量列(仅保留唯一值数量大于1的列)
    df = df.loc[:, df.apply(pd.Series.nunique) != 1]
    
    # 清理列名前后空白,避免潜在的列名匹配问题
    df.columns = df.columns.str.strip()
    
    # 划分训练集和测试集
    X_train, X_test = df[0:-nobs], df[-nobs:]
    
    # 执行格兰杰因果检验
    result = granger.granger_causation_matrix(X_train, variables=X_train.columns)
    print("gct")
    return render_template("gct.html",output=X_train)

额外检查建议

  • 执行print(df.nunique())可以查看各列的唯一值数量,确认所有列都不是全常量;
  • 如果仍有报错,检查是否存在近乎常量的列(比如仅1-2个不同值),这类列也可能影响检验结果,可根据业务需求决定是否移除。

内容的提问来源于stack exchange,提问作者Neha Khairnar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 06:08:09