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

pandas删除DataFrame列时出现'DataFrame' object is not callable错误

问题原因

  • 语法错误:你把DataFrame对象直接加括号当成函数调用,才会抛出'DataFrame' object is not callable报错。删除列需要调用DataFrame的drop方法,正确写法是breast_cancer_df.drop()而非breast_cancer_df()。
  • 列名定义错误:list(breast_cancer.feature_names).append('class')中,append()是列表原地修改方法,返回值为None,你将这个返回值传给了pd.DataFrame的columns参数,会导致生成的DataFrame没有你预期的class列,所有列名会变成默认的0、1、2……
  • 逻辑错误:你的代码本意应该是选取除最后一列class外的所有特征列转为数值类型,而非删除最后一列。如果真的删除了class列,后续sns.pairplot指定hue='class'也会报错找不到对应列。

修正后可运行代码

import numpy as np
import seaborn as sns; sns.set(style="ticks", color_codes=True)
import sklearn.datasets
import pandas as pd

breast_cancer = sklearn.datasets.load_breast_cancer()
# 修正列名定义:先构造完整列名列表再传入
cols_list = list(breast_cancer.feature_names)
cols_list.append('class')
breast_cancer_df = pd.DataFrame(
 data= np.c_[breast_cancer.data, [breast_cancer.target_names[v] for v in breast_cancer.target]],
 columns= cols_list
)
# 修正:选取除最后一列外的所有列转为数值
cols = breast_cancer_df.columns[:-1]
breast_cancer_df[cols] = breast_cancer_df[cols].apply(pd.to_numeric)
g = sns.pairplot(breast_cancer_df, hue='class')

如果确实需要删除class列,对应代码调整为:

# inplace=True时drop方法无返回值,不需要赋值给cols
breast_cancer_df.drop(columns=breast_cancer_df.columns[-1], axis=1, inplace=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 03:12:03