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

运行Python Probit模型时遇‘len() of unsized object’错误求解决

解决Probit模型运行时的"len() of unsized object"错误

问题根源

你直接对Spark DataFrame执行索引操作并转换为numpy数组,得到的是Spark Row对象的数组,而非数值型矩阵。Statsmodels无法识别这种非数值结构,从而抛出"len() of unsized object"错误。

解决方案

将Spark DataFrame转换为本地Pandas DataFrame后再处理,Statsmodels原生支持Pandas数据结构,能正确解析数值变量。

修正后的代码

import statsmodels.api as sm
import pandas as pd

# 从Spark获取数据并转换为Pandas DataFrame
df = spark.sql("select * from knn_df").toPandas()

cols=['constant','clnt_tenure_0_1', 'clnt_tenure_2_5', 'clnt_tenure_6_9', 
'clnt_tenure_10_19', 'clnt_tenure_20p']

# 直接使用Pandas对象传入模型,无需转numpy数组
X = df[cols]
y = df['nl']  # 用Series而非DataFrame,更符合Statsmodels要求

# 拟合Probit模型
probit_model = sm.Probit(y, X)
result = probit_model.fit()
print(result.summary2())

额外说明

  1. 导入修正:原代码中import statsmodels.api as smf是错误的,smf通常对应statsmodels.formula.api,而基础的Probit模型应导入statsmodels.api(别名sm)或直接从statsmodels.discrete.discrete_model导入Probit。
  2. y的格式:使用df['nl']得到Pandas Series,比二维DataFrame更适配Statsmodels的模型输入要求。
  3. 内存注意:如果数据集过大,toPandas()可能导致内存溢出,此时需考虑采样或使用分布式统计库处理。

内容的提问来源于stack exchange,提问作者Aaron Fehl

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 05:37:42