2016-06-07 160 views
0

我试图做出一个简单的决策树,但我一直在获取相同的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: 
+1

是否在您的'classifier.fit'中发生错误?或者别的地方? 你可以发布你试图分类的数据样本吗? – pekapa

+0

你能编辑你的问题来显示完整的回溯? 'data_clean.dtypes'的输出也是有用的(如果你可以分享的话也可以使用'data_clean.head()')。 –

+0

在我看来,你似乎在试图预测一个浮点值(就业率)。这是一个回归问题,而不是分类问题。请尝试使用'DecisionTreeRegressor'。如果您发布回溯,我们将能够提供更好的帮助,以便我们可以看到'ValueError'来自哪一行。 –

回答

0

这是最有可能的数据有问题。由于您在代码中没有任何要转换为浮点的位置,因此必须确保您所拥有的数据处于阻止其通过解析命令作为数字读取的形式。

1

您可以使用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')` 
相关问题