2016-06-07 200 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')` 
相關問題