Python - 输入包含 NaN、无穷大或对于 dtype('float64') 来说太大的值

Posted

技术标签:

【中文标题】Python - 输入包含 NaN、无穷大或对于 dtype(\'float64\') 来说太大的值【英文标题】:Python - Input contains NaN, infinity or a value too large for dtype('float64')Python - 输入包含 NaN、无穷大或对于 dtype('float64') 来说太大的值 【发布时间】:2016-03-25 08:03:33 【问题描述】:

我是 Python 新手。我正在尝试使用 sklearn.cluster。 这是我的代码:

from sklearn.cluster import MiniBatchKMeans

kmeans=MiniBatchKMeans(n_clusters=2)
kmeans.fit(df)

但我收到以下错误:

     50             and not np.isfinite(X).all()):
     51         raise ValueError("Input contains NaN, infinity"
---> 52                          " or a value too large for %r." % X.dtype)

 ValueError: Input contains NaN, infinity or a value too large for dtype('float64')

我检查了没有 Nan 或 infinity 值。所以只剩下一个选项了。但是,我的数据信息告诉我所有变量都是float64,所以我不明白问题出在哪里。

df.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 362358 entries, 135 to 4747145
Data columns (total 8 columns):
User         362358 non-null float64
Hour         362352 non-null float64
Minute       362352 non-null float64
Day          362352 non-null float64
Month        362352 non-null float64
Year         362352 non-null float64
Latitude     362352 non-null float64
Longitude    362352 non-null float64
dtypes: float64(8)
memory usage: 24.9 MB

非常感谢,

【问题讨论】:

I checked that the there is no Nan or infinity value. 请告诉我们你是怎么做到的。 对数据进行排序并检查顶部/底部值。 我认为df 是熊猫数据框?如果是这样,请尝试kmeans.fit(df.as_matrix())。 Scikit-learn 没有 DataFrame 的概念,只有 numpy 数组。 【参考方案1】:

我认为fit() 只接受“类似数组,形状 = [n_samples,n_features]”,而不接受 pandas 数据帧。所以尝试将数据框的值传递给它:

kmeans=MiniBatchKMeans(n_clusters=2)
kmeans.fit(df.values)

或对它们进行整形以正确运行该功能。希望对您有所帮助。

【讨论】:

谢谢@Fabio,我试过了,但我仍然有同样的错误 我也有同样的情况。已验证数据不存在空值但得到上述错误信息【参考方案2】:

通过查看您的 df.info(),似乎非空用户值比任何其他列的值多 6 个。这表明您在其他每一列中有 6 个空值,这就是错误的原因。

<class 'pandas.core.frame.DataFrame'>
Int64Index: 362358 entries, 135 to 4747145
Data columns (total 8 columns):
User         362358 non-null float64
Hour         362352 non-null float64
Minute       362352 non-null float64
Day          362352 non-null float64
Month        362352 non-null float64
Year         362352 non-null float64
Latitude     362352 non-null float64
Longitude    362352 non-null float64
dtypes: float64(8)
memory usage: 24.9 MB

【讨论】:

【参考方案3】:

通过查看您的 df.info(),似乎非空用户值比任何其他列的值多 6 个。这表明您在其他每一列中有 6 个空值,这就是错误的原因。

因此,您可以使用 iloc() 将数据切分到合适的位置:

df = pd.read_csv(location1, encoding = "ISO-8859-1").iloc[2:20]

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 18 entries, 2 to 19
Data columns (total 6 columns):
zip_code     18 non-null int64
latitude     18 non-null float64
longitude    18 non-null float64
city         18 non-null object
state        18 non-null object
county       18 non-null object
dtypes: float64(2), int64(1), object(3)

【讨论】:

以上是关于Python - 输入包含 NaN、无穷大或对于 dtype('float64') 来说太大的值的主要内容,如果未能解决你的问题,请参考以下文章

ValueError:输入包含 NaN、无穷大或对于 dtype 来说太大的值

GridSearchCV():ValueError:输入包含 NaN、无穷大或对于 dtype('float64') 来说太大的值

SVM ValueError:输入包含 NaN、无穷大或对于 dtype('float64') 来说太大的值

如何解决:ValueError:输入包含 NaN、无穷大或对于 dtype('float32') 来说太大的值?

StandardScaler -ValueError:输入包含 NaN、无穷大或对于 dtype('float64')来说太大的值

Jupiter Notebook:输入包含 NaN、无穷大或对于 dtype('float64') 来说太大的值