报错:'DataFrame'对象不可调用,混淆矩阵代码问题排查
解决混淆矩阵代码中的TypeError:'DataFrame'对象不可调用
嘿,这个问题我太熟悉了!你这是不小心踩了变量命名冲突的坑😎
问题根源
你把要创建的结果DataFrame变量命名成了confusion_matrix,但这个名字刚好和你要调用的sklearn评估函数confusion_matrix()重名了。当Python执行到confusion_matrix(y, yhat)这一步时,它已经把confusion_matrix当成你后面要赋值的那个空DataFrame变量了(而不是原本的sklearn函数),自然就会报错说“DataFrame对象不可调用”。
两种解决办法
方法1:给结果DataFrame换个不冲突的变量名(推荐)
最简单的方式就是把存储结果的变量名改成比如confusion_matrix_df,彻底避免和函数名撞车:
# 先确保你已经导入了sklearn的confusion_matrix函数 from sklearn.metrics import confusion_matrix import pandas as pd y = list(y_test.values) yhat = list(predictions) print(y) print(yhat) # 换个变量名,比如confusion_matrix_df confusion_matrix_df = pd.DataFrame( confusion_matrix(y, yhat), columns=["Predicted False", "Predicted True"], index=["Actual False", "Actual True"] ) display(confusion_matrix_df)
方法2:明确指定要调用的是sklearn的函数
如果你不想改变量名,也可以在调用函数时加上完整的模块路径,让Python清楚你要调用的是哪个confusion_matrix:
import sklearn.metrics as metrics import pandas as pd y = list(y_test.values) yhat = list(predictions) print(y) print(yhat) # 明确使用sklearn.metrics下的confusion_matrix函数 confusion_matrix = pd.DataFrame( metrics.confusion_matrix(y, yhat), columns=["Predicted False", "Predicted True"], index=["Actual False", "Actual True"] ) display(confusion_matrix)
小提醒
这种命名冲突在Python里很常见,尤其是导入常用函数时,尽量避免用函数名、模块名来命名自己的变量,能省不少麻烦~
内容的提问来源于stack exchange,提问作者Raksha
相关产品推荐
相关产品推荐

