ValueError:输入包含NaN,无穷大或者对于dtype(' float64')使用LinearRegression的值太大

时间:2017-09-04 15:54:17

标签: python machine-learning

我在python中练习机器学习。我遇到了障碍,但我遇到了困难。我使用的数据集是titanic.csv。我正在尝试使用线性回归计算Age列缺失值。

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()]

使用上面的代码我得到没有值的列,表明没有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').

请帮助我无法弄清楚代码中的错误。

3 个答案:

答案 0 :(得分:2)

我遇到了同样的错误,因为我的数据(在几列中)包含一些非数字值。一旦我进行了一些数据整理(将空值替换为该列的平均值),那么它就可以正常工作。

mean=df['bedrooms'].mean()
df['bedrooms'].replace(np.nan,mean, inplace=True)

然后

features =["floors" ,"bedrooms" ,"sqft" ,"bathrooms"]     
X = df[features]
Y = df['price']
lm = LinearRegression()
lm.fit(X,Y)
lm.score(X, Y)

答案 1 :(得分:0)

您正在使用train.notnull().count():这将返回每列中非NaN值的总数。它不会返回NaN值的计数。您还可以通过将此数字(在本例中为1046)与数据集中存在的总行数进行比较来检查这一点。

使用train.isnull().sum()查找训练数据集中存在的NaN值总数。如果您看到正数,那么您的列车中有NaN值。

答案 2 :(得分:0)

如果您只想从那些不包含NaN值的'unify'行构建训练集:

train = unify.dropna()