fit_transform 中的错误:输入包含 NaN、无穷大或对于 dtype('float64') 而言太大的值
Posted
技术标签:
【中文标题】fit_transform 中的错误:输入包含 NaN、无穷大或对于 dtype(\'float64\') 而言太大的值【英文标题】:Error in fit_transform: Input contains NaN, infinity or a value too large for dtype('float64')fit_transform 中的错误:输入包含 NaN、无穷大或对于 dtype('float64') 而言太大的值 【发布时间】:2017-09-06 05:23:22 【问题描述】:我有一个形状为 (14407, 2564) 的数据框。我正在尝试使用 VarianceThreshold 函数删除低方差特征。但是,当我调用 fit_transform 时,出现以下错误:
ValueError:输入包含 NaN、无穷大或对于 dtype('float64') 来说太大的值。
在使用 VarianceThreshold 之前,我使用以下代码替换了我的 df 中的所有缺失值:
df.replace('null',np.NaN, inplace=True)
df.replace(r'^\s*$', np.NaN, regex=True, inplace=True)
df.fillna(value=df.median(), inplace=True)
我随后使用以下方法检查了我的数据框是否有任何空/无限值:
m = df.isnull().any()
print "========= COLUMNS WITH NULL VALUES ================="
print m[m]
print "========= COLUMNS WITH INFINITE VALUES ================="
m = np.isfinite(df.select_dtypes(include=['float64'])).any()
print m[m]
我得到一个空系列作为输出,这意味着我的所有列都没有任何缺失值。输出是:
========= COLUMNS WITH NULL VALUES =================
Series([], dtype: bool)
========= COLUMNS WITH INFINITE VALUES =================
Series([], dtype: bool)
完整的错误跟踪:
Traceback (most recent call last):
File "/home/users/MyUsername/MyProject/src/main/python/Main.py", line 222, in <module>
main()
File "/home/users/MyUsername/MyProject/src/main/python/Main.py", line 218, in main
getAllData()
File "/home/users/MyUsername/MyProject/src/main/python/Main.py", line 95, in getAllData
predictors, labels, dropped_features = fselector.process(variance=True, corr=True, bestf=True, bestfk=200)
File "/home/users/MyUsername/MyProject/src/main/python/classes/featureselector.py", line 54, in process
self.getVariance(threshold=(.95 * (1 - .95)))
File "/home/users/MyUsername/MyProject/src/main/python/classes/featureselector.py", line 136, in getVariance
self.removeLowVarianceColumns(df=self.X, thresh=threshold)
File "/home/users/MyUsername/MyProject/src/main/python/classes/featureselector.py", line 213, in removeLowVarianceColumns
selector.fit_transform(df)
File "/usr/lib64/python2.7/site-packages/sklearn/base.py", line 494, in fit_transform
return self.fit(X, **fit_params).transform(X)
File "/usr/lib64/python2.7/site-packages/sklearn/feature_selection/variance_threshold.py", line 64, in fit
X = check_array(X, ('csr', 'csc'), dtype=np.float64)
File "/usr/lib64/python2.7/site-packages/sklearn/utils/validation.py", line 407, in check_array
_assert_all_finite(array)
File "/usr/lib64/python2.7/site-packages/sklearn/utils/validation.py", line 58, in _assert_all_finite
" or a value too large for %r." % X.dtype)
ValueError: Input contains NaN, infinity or a value too large for dtype('float64').
所以,我不确定要检查什么,这似乎不是缺失值问题,但我也无法获得导致问题的列/值。
我在这里看到几个线程都以缺失值结束,但这似乎不是这里的问题。
【问题讨论】:
您应该始终发布错误的完整堆栈跟踪 @VivekKumar 我已将其添加到帖子中 先将其转换为np数组X = np.asanyarray(df)
。然后,检查以下两个语句是否返回true或false:1)np.isfinite(X.sum())
2)np.isfinite(X).all()
【参考方案1】:
我通过将数据转换为数字来解决这个问题。看来,虽然错误消息指出“float64”,但我的数据只是所有对象,并且对象不能很好地与 fit_transform 配合使用。
使用以下方法将我的数据更改为浮动:
df = df.apply(lambda x: pd.to_numeric(x,errors='ignore'))
解决了这个问题。
【讨论】:
以上是关于fit_transform 中的错误:输入包含 NaN、无穷大或对于 dtype('float64') 而言太大的值的主要内容,如果未能解决你的问题,请参考以下文章
如何编写具有两个输入的 fit_transformer 并将其包含在 python sklearn 的管道中?
LabelEncoder.fit_transform() 的类型错误
sklearn PCA fit_transform() 是不是居中输入变量?
为啥 SimpleImputer 的 fit_transform 不适用于 google colab 中的数据框?
`ColumnTransformer.fit_transform()`的结果只包含后来的transfromer的结果[关闭]