Python - ValueError:无法将字符串转换为浮点数:
问题描述:
我试图做出一个简单的决策树,但我一直在获取相同的ValueError,并且没有任何类似的威胁有任何帮助。我的变量都不是字符串,但仍然出现转换错误。Python - ValueError:无法将字符串转换为浮点数:
from pandas import Series, DataFrame
import pandas as pd
import numpy as np
import os
import matplotlib.pylab as plt
from sklearn.cross_validation import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import classification_report
import sklearn.metrics
os.chdir("C:\Mlearning")
"""
Data Engineering and Analysis
"""
#Load the dataset
AH_data = pd.read_csv("gapminder.csv")
data_clean = AH_data.dropna()
#data_clean.dtypes
#data_clean.describe()
"""
Modeling and Prediction
"""
#Split into training and testing sets
predictors = data_clean[['breastcancerper100th','alcconsumption']]
targets = data_clean.employrate
pred_train, pred_test, tar_train, tar_test = train_test_split(predictors, targets, test_size=.4)
pred_train.shape
pred_test.shape
tar_train.shape
tar_test.shape
#Build model on training data
classifier=DecisionTreeClassifier()
classifier=classifier.fit(pred_train,tar_train)
predictions=classifier.predict(pred_test)
sklearn.metrics.confusion_matrix(tar_test,predictions)
sklearn.metrics.accuracy_score(tar_test, predictions)
#Displaying the decision tree
from sklearn import tree
#from StringIO import StringIO
from io import StringIO
#from StringIO import StringIO
from IPython.display import Image
out = StringIO()
tree.export_graphviz(classifier, out_file=out)
import pydotplus
graph=pydotplus.graph_from_dot_data(out.getvalue())
graph.write_pdf("graph.pdf")
但是,我得到的结果是这样的一个:
array = np.array(array, dtype=dtype, order=order, copy=copy)
ValueError: could not convert string to float:
答
这是最有可能的数据有问题。由于您在代码中没有任何要转换为浮点的位置,因此必须确保您所拥有的数据处于阻止其通过解析命令作为数字读取的形式。
答
您可以使用pd.to_numeric(在版本0.17中引入)将列或系列转换为数字类型。该函数也可以应用在DataFrame的多列上。
重要的是,该函数还会使用一个错误关键字参数,它允许您强制非数值为NaN,或者简单地忽略包含这些值的列。
如果您将al条目转换为数字,将会工作。我为此使用了一个小函数:
def convert_column_numeric(ax):
predictors[ax] = pd.to_numeric(predictors[ax], errors='coerce')
.....
convert_column_numeric('breastcancerper100th')
convert_column_numeric('alcconsumption')`
是否在您的'classifier.fit'中发生错误?或者别的地方? 你可以发布你试图分类的数据样本吗? – pekapa
你能编辑你的问题来显示完整的回溯? 'data_clean.dtypes'的输出也是有用的(如果你可以分享的话也可以使用'data_clean.head()')。 –
在我看来,你似乎在试图预测一个浮点值(就业率)。这是一个回归问题,而不是分类问题。请尝试使用'DecisionTreeRegressor'。如果您发布回溯,我们将能够提供更好的帮助,以便我们可以看到'ValueError'来自哪一行。 –