使用Pandas读取CSV后调用SelectKBest报错:DataFrame对象不可调用
问题解决:TypeError: 'DataFrame' object is not callable
错误根源
你用data(return_X_y=True)是完全错误的——return_X_y=True是sklearn自带数据集加载函数(比如sklearn.datasets.load_*系列)的参数,而data是Pandas读取出来的DataFrame对象,不能像函数那样加括号调用,这才是报错的核心原因。和文件路径无关,你之前改引号、加r前缀的操作没切中问题点。
修正步骤
- 拆分特征X和标签y:皮马印第安人糖尿病数据集的最后一列是目标变量(是否患糖尿病),直接用Pandas的索引操作拆分即可:
- X取所有行、除最后一列外的所有列作为特征
- y取所有行的最后一列作为标签
- 调整k值:这个数据集总共只有8个特征,你设置
k=20会触发参数错误,得改成≤8的数值,比如k=4
修正后的完整代码
import pandas as pd from sklearn.feature_selection import SelectKBest, chi2 # 读取数据集(确保文件路径正确,这里假设pima.csv在当前工作目录) data = pd.read_csv(r"pima.csv") # 正确拆分特征X和标签y X = data.iloc[:, :-1] # 所有行,除最后一列外的列作为特征 y = data.iloc[:, -1] # 所有行的最后一列作为标签 print("原特征形状:", X.shape) # 特征选择,k值改为数据集特征数量范围内的数值 X_new = SelectKBest(chi2, k=4).fit_transform(X, y) print("选择后特征形状:", X_new.shape)
额外说明
如果你的数据集目标列不是最后一列,也可以直接用列名指定,比如假设目标列叫Outcome:
X = data.drop('Outcome', axis=1) y = data['Outcome']
内容的提问来源于stack exchange,提问作者Dabbas
相关产品推荐
相关产品推荐

