ValueError:条件需要布尔数组,而不是对象
- 2025-03-26 09:10:00
- admin 原创
- 11
问题描述:
我正在尝试使用 sklearn 构建分类器,并在运行代码时在控制台中出现以下错误。
ValueError: Boolean array expected for the condition, not object
我尝试调整我的数据(填充空值)以及重塑属性(但无济于事)。
以下是相关代码
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.metrics import confusion_matrix
from sklearn.tree import DecisionTreeClassifier
from sklearn.externals import joblib
# Get the dataset
dataset = pd.read_csv('master_info_final_v12_conversion.csv')
# Split the dataset into features and labels
X = dataset[dataset[['Happy', 'Stress', 'Eyes']]]
y = dataset[dataset['phenotype']]
# Split the dataset into training and testing data
X_train, X_test, y_train, y_test = train_test_split(X, y)
# Build the classifier and make prediction
classifier = DecisionTreeClassifier()
classifier.fit(X_train, y_train)
prediction = classifier.predict(X_test)
# Print the confusion matrix
print(confusion_matrix(y_test, prediction))
# Save the model to disk
joblib.dump(classifier, 'classifier.joblib')
以下是我的数据的快照:
姓名 | 等级 | 表型 | 快乐的 | 压力 | 眼睛 |
---|---|---|---|---|---|
汤米 | 7.1 | 男生 | 56 | 23 | 19 |
吉尔 | 2.3 | 女孩 | 74 | 57 | |
卡洛斯 | 4.4 | 两者都不 | 四十五 |
解决方案 1:
此错误最常发生在您尝试使用数据框选择列时。例如,在 OP 中,使用整个数据框(而不是列名列表/数组)来选择列,这会引发此错误。
X = dataset[dataset[['Happy', 'Stress', 'Eyes']]] # <----- error
X = dataset[['Happy', 'Stress', 'Eyes']] # <----- no error
请注意,许多方法(例如、、等pd.DataFrame
)select_dtypes()
都会返回一个数据框,因此请按原样使用结果;不要再次使用它来过滤数据框。filter()
`query()`take()
df.select_dtypes('int') # <--- already dataframe
df[df.select_dtypes('int')] # <--- ValueError: Boolean array expected
df.filter(['col1']) # <--- already dataframe
df[df.filter(['col1'])] # <--- ValueError: Boolean array expected
另一种情况是,当你调用时where()
没有布尔条件。例如,
df = pd.DataFrame({'col1': [1, 2, 3], 'col2': ['a', 'b', 'c']})
df.where(df['col2']) # <----- error
df.where(df['col2'] == 'a') # <----- no error
事实上,如果我们查看源代码,当你将数据框传递给__getitem__
(即[]
)时,就像在第一种情况下一样,where()
被调用,所以两种情况都归结为代码的同一部分。
相关推荐
热门文章
项目管理软件有哪些?
热门标签
云禅道AD