2017-09-04 82 views
0

我在Python中練習機器學習。我陷入了一個障礙,但我遇到了困難。我使用的數據集是titanic.csv。我正在嘗試使用線性迴歸計算年齡列缺失值。ValueError:輸入包含使用LinearRegression的dtype('float64')的NaN,無窮大或值太大

training = dftrain[['Age','SibSp','Parch','Fare','Pclass','Sex_female', 
       'Sex_male','Embarked_C','Embarked_Q','Embarked_S']] 
testing = dftest[['Age','SibSp','Parch','Fare','Pclass','Sex_female', 
       'Sex_male','Embarked_C','Embarked_Q','Embarked_S']] 
unify = pd.concat([training, testing]) 
train = unify[unify['Age'].notnull()] 
clf = LinearRegression() 
#clf.fit(train.drop(['Age'],axis = 1), train['Age']) 
pd.set_option('display.max_rows',None) 
train 

我已手動企圖以修復錯誤,

train[train['Age'].isnull()] 

使用I得到與沒有值指示不存在NaN值列上面的代碼。我爲所有列做了這個。我使用,

train.notnull().count() 
Age   1046 
SibSp   1046 
Parch   1046 
Fare   1046 
Pclass  1046 
Sex_female 1046 
Sex_male  1046 
Embarked_C 1046 
Embarked_Q 1046 
Embarked_S 1046 
dtype: int64  

還檢查了,但每當我覺得一切都好去,我取消對clf.fit()函數,我得到的錯誤

ValueError: Input contains NaN, infinity or a value too large for dtype('float64'). 

請幫我想不出我的代碼有什麼問題。

回答

0

您正在使用train.notnull().count():這將返回每列中非NaN值的總數。它不會返回NaN值的計數。您也可以通過比較此數字(本例中爲1046)與數據集中存在的總行數來檢查此情況。

使用train.isnull().sum()找到訓練數據集中存在的NaN值的總數。如果你看到正數,那麼你的訓練集中就有NaN值。

0

如果你只是想構建培訓從不包含NaN值的「統一」的那些行設置:

train = unify.dropna() 
+0

是。我試圖做到這一點。我會進一步解釋。在做train.isnull.sum()之後,在NaN的Fare列中有一個值,而且,我希望看到該行顯示它有兩行,並且具有相同的索引,其中一行沒有null,另一行票價爲空值。所以我用平均值填充了NaN值,隨後具有相同索引的兩行消失了。不知何故...但它的工作,所以這是很好,我猜 – Pseudo

相關問題