我正在尝试使用scikit learn拟合一个简单的机器学习模型。在这行代码上:
```python ```clf.fit(features, labels)
我遇到了一个熟悉的错误:
Input contains NaN, infinity or a value too large for dtype('float64').
我以前遇到过类似的问题,通常是因为数据中存在NaN值。但我已经确认数据中没有NaN值。.fit()方法的两个输入(特征和标签)都是np数组,但它们是从pandas数据框架生成的。在检测NaN值之前,我打印了:
print(features_df[features_df.isnull().any(axis=1)])
print(labels_df[labels_df.isnull().any(axis=1)])
这打印出了空的数据框,所以我知道其中没有行有NaN值。在转换后,我还检查了numpy数组是否存在NaN值,并成功地使用np.sum()方法对它们进行了求和,因此传递给fit的特征或标签np数组中没有NaN值。
这意味着必须存在无穷大的值或非常大的值,两者我都很难相信。有没有办法可以打印出数据框或np数组中任何值:
are NaN, infinity or a value too large for dtype('float64')?
我需要具体指出它们的位置,因为我的眼睛找不到它们,并且没有 NaN 值。
df = df[df.column_name.notnull()]
?df = df[df.notnull()]
也应该有效。df
是 pandas 数据框。 - YKY~np.isfinite
来查找,前导波浪线表示反转掩码。如果你需要索引而不是掩码,请在掩码上使用np.where
。 - Paul Panzer