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
相关产品推荐
相关产品推荐

