Statsmodels是否兼容Dask DataFrame?Logit模型适配问题咨询
Statsmodels对Dask DataFrame的支持问题及解决方案
核心结论
Statsmodels不原生支持Dask DataFrame,其所有模型(包括Logit逻辑回归)仅接受Pandas的DataFrame/Series等数据结构作为输入,这是你遇到第一个错误的直接原因。
错误原因分析与解决
第一个错误(
ValueError: unrecognized data structures)
直接传入Dask DataFrame/Series给Logit,Statsmodels无法识别非Pandas的数据结构,必须先将数据转换为Pandas格式。第二个错误(
AttributeError: 'Index' object has no attribute 'equals')
你仅对自变量(exog)调用了.compute()转为Pandas DataFrame,但因变量(endog)仍是Dask Series,两者数据类型不匹配导致报错。需要同时将endog和exog都转为Pandas结构。
正确代码示例
from statsmodels.api import Logit # 方案1:先将整个Dask DataFrame转为Pandas DataFrame smarket_pd = smarket_1.compute() logistic_reg = Logit( endog=smarket_pd['Direction'], exog=smarket_pd.drop(labels='Direction', axis=1) ).fit() logistic_reg.summary() # 方案2:单独转换因变量和自变量 logistic_reg = Logit( endog=smarket_1['Direction'].compute(), exog=smarket_1.drop(labels='Direction', axis=1).compute() ).fit() logistic_reg.summary()
为什么Sklearn可以正常运行?
Sklearn的模型接口对Dask DataFrame有适配支持,Dask实现了与Pandas兼容的数据访问API,因此Sklearn可以直接处理Dask对象;而Statsmodels没有做这方面的适配,仅支持原生Pandas数据结构。
内容的提问来源于stack exchange,提问作者Adarsh Namdev
相关产品推荐
相关产品推荐

