我在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').
请帮助我无法弄清楚代码中的错误。
答案 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()