![](/img/trans.png)
[英]sklearn error ValueError: Input contains NaN, infinity or a value too large for dtype('float32')
[英]ValueError: Input contains NaN, infinity or a value too large for dtype('float32'). Why?
我经历了所有类似的问题,但没有一个回答我的查询。 我正在使用随机森林分类器,如下所示:
from sklearn.ensemble import RandomForestClassifier
clf = RandomForestClassifier(n_estimators=100, max_depth=2, random_state=0)
clf.fit(X_train, y_train)
clf.predict(X_test)
这给了我这个错误:
ValueError: Input contains NaN, infinity or a value too large for dtype('float32').
但是,当我执行X_train.describe()
我看不到任何缺失的值。 实际上,实际上,在拆分数据之前,我已经照顾了缺失的值。
当我执行以下操作时:
np.where(X_train.values >= np.finfo(np.float32).max)
我得到:
(array([], dtype=int64), array([], dtype=int64))
对于这些命令:
np.any(np.isnan(X_train)) #true
np.all(np.isfinite(X_train)) #false
在获得以上结果之后,我还尝试了以下方法:
X_train.fillna(X_train.mean())
但是我遇到了同样的错误,它不能解决任何问题。
请告诉我我要去哪里了。 谢谢!
解
X_train = X_train.fillna(X_train.mean())
说明
np.any(np.isnan(X_train))
等效为True
,因此X_train
包含一些nan
值。 对于每个熊猫fillna()docs ,DataFrame.fillna()返回填充了缺失值的DataFrame副本。 您必须将X_train重新分配给fillna()的返回值,例如X_train = X_train.fillna(X_train.mean())
例
>>> import pandas as pd
>>> import numpy as np
>>>
>>> a = pd.DataFrame(np.arange(25).reshape(5, 5))
>>> a[2][2] = np.nan
>>>
>>> a
0 1 2 3 4
0 0 1 2.0 3 4
1 5 6 7.0 8 9
2 10 11 NaN 13 14
3 15 16 17.0 18 19
4 20 21 22.0 23 24
>>>
>>> a.fillna(1)
0 1 2 3 4
0 0 1 2.0 3 4
1 5 6 7.0 8 9
2 10 11 1.0 13 14
3 15 16 17.0 18 19
4 20 21 22.0 23 24
>>>
>>> a
0 1 2 3 4
0 0 1 2.0 3 4
1 5 6 7.0 8 9
2 10 11 NaN 13 14
3 15 16 17.0 18 19
4 20 21 22.0 23 24
>>>
>>> a = a.fillna(1)
>>> a
0 1 2 3 4
0 0 1 2.0 3 4
1 5 6 7.0 8 9
2 10 11 1.0 13 14
3 15 16 17.0 18 19
4 20 21 22.0 23 24
>>>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.