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

使用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前缀的操作没切中问题点。

修正步骤

  1. 拆分特征X和标签y:皮马印第安人糖尿病数据集的最后一列是目标变量(是否患糖尿病),直接用Pandas的索引操作拆分即可:
    • X取所有行、除最后一列外的所有列作为特征
    • y取所有行的最后一列作为标签
  2. 调整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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 05:20:09