我正在使用sklearn,但在亲和力传播方面遇到了问题。我已经构建了一个输入矩阵,并且一直收到以下错误。
ValueError: Input contains NaN, infinity or a value too large for dtype('float64').
我跑过了
np.isnan(mat.any()) #and gets False
np.isfinite(mat.all()) #and gets True
我试着用
mat[np.isfinite(mat) == True] = 0
删除无限值,但这也不起作用。我该怎么做才能去掉矩阵中的无限值,以便可以使用亲和传播算法?
我使用的是anaconda和python 2.7.9。
发布于 2017-10-05 16:30:13
这是我的函数(基于this),用于清除数据集上的nan
、Inf
和丢失的单元格(对于倾斜的数据集):
import pandas as pd
def clean_dataset(df):
assert isinstance(df, pd.DataFrame), "df needs to be a pd.DataFrame"
df.dropna(inplace=True)
indices_to_keep = ~df.isin([np.nan, np.inf, -np.inf]).any(1)
return df[indices_to_keep].astype(np.float64)
发布于 2015-07-15 05:09:47
我的输入数组的维度是不对称的,因为我的输入csv有空格。
发布于 2019-11-25 09:05:32
在大多数情况下,摆脱无限和空值可以解决这个问题。
去掉无穷值。
df.replace([np.inf, -np.inf], np.nan, inplace=True)
按您喜欢的方式删除空值、特定值,如999、mean,或者创建自己的函数来估算缺少的值
df.fillna(999, inplace=True)
https://stackoverflow.com/questions/31323499
复制相似问题