使用Light_FAMD执行FAMD时报SparseDataFrame() takes no arguments如何解决
报错原因
你遇到的TypeError: SparseDataFrame() takes no arguments报错,是由于使用的light_famd、旧版prince等库依赖pandas已废弃的接口:SparseDataFrame类在pandas 1.0及以上版本中被彻底移除,仅保留的兼容存根也不支持任何传入参数,旧库中调用该类传参的逻辑全部失效。
修复方案
方案1:升级使用适配新版pandas的prince库(最推荐)
prince库的新版本已经完全适配新版pandas,替换原有light_famd的调用即可,改动极小:
- 首先升级prince到最新版本
pip install --upgrade prince
- 调整代码适配prince的FAMD接口
import pandas as pd import numpy as np from prince import FAMD # 测试数据集生成逻辑不变 X_n = pd.DataFrame(data=np.random.randint(0,100,size=(10,2)),columns=list('AB')) X_c = pd.DataFrame(np.random.choice(list('abcde'),size=(10,4),replace=True),columns =list('CDEF')) X = pd.concat([X_n,X_c],axis=1) # FAMD调用逻辑仅参数名和方法名有微小调整 famd = FAMD(n_components=2, random_state=42) famd.fit(X) print(famd.explained_inertia_) # 对应原light_famd的explained_variance_ print(famd.column_correlations(X)) # 对应原column_correlation方法
方案2:降级pandas版本(仅兼容旧代码时使用)
如果必须使用原有light_famd版本,可将pandas降级到最后一个支持带参SparseDataFrame的0.25.3版本,缺点是会和大量新版数据科学库产生兼容冲突:
pip install pandas==0.25.3
方案3:手动修复light_famd源码
找到本地light_famd库中所有调用SparseDataFrame的代码行,将SparseDataFrame(参数)的写法替换为pandas新版支持的稀疏数据构造逻辑,示例替换逻辑如下:
# 原旧代码 # df = SparseDataFrame(data, index=idx, columns=cols) # 替换为新写法 df = pd.DataFrame(data, index=idx, columns=cols).astype(pd.SparseDtype(float))
其他库报错处理
原生sklearn本身不依赖SparseDataFrame,如果调用sklearn也出现该报错,直接升级scikit-learn到最新版本即可解决:
pip install --upgrade scikit-learn
内容的提问来源于stack exchange,提问作者Marie M
相关产品推荐
相关产品推荐

