使用Python Imputer时出现Isnan不支持输入类型的错误求助
解决"Isnan is not supported for the input types"错误
嘿,我帮你排查下这个问题!你遇到的这个错误主要是两个原因导致的,咱们一步步来解决:
1. 已弃用的Imputer与错误的缺失值参数设置
在新版scikit-learn里,sklearn.preprocessing.Imputer已经被官方弃用并移除了,取而代之的是sklearn.impute.SimpleImputer。另外你之前设置的missing_values='nan'是字符串类型,但实际数据里的缺失值标记应该是numpy的np.nan(数值类型的缺失标识),这就导致程序没法正确识别缺失值,进而触发了isnan不支持输入类型的错误。
2. 可能数据列并非数值类型
如果你的数据集里第2、3列(对应代码里的X[:,1:3])是字符串格式,那即使识别到缺失值,也没法计算均值,同样会引发类似错误。
修改后的正确代码
import numpy as np import matplotlib.pyplot as plt import pandas as pd # 导入数据集 dataset = pd.read_csv('Data.csv') X = dataset.iloc[:,:-1].values Y = dataset.iloc[:,3].values # 处理缺失数据 - 使用新版SimpleImputer from sklearn.impute import SimpleImputer # 指定缺失值为numpy标准的np.nan,策略为均值,按列计算 imputer = SimpleImputer(missing_values=np.nan, strategy='mean') # 拟合需要处理的列 imputer.fit(X[:,1:3]) # 转换并填充缺失值 X[:,1:3] = imputer.transform(X[:,1:3])
额外注意事项
- 如果你非要用旧版的
Imputer(非常不推荐,因为官方已弃用,未来版本会彻底移除),那至少要把missing_values='nan'改成missing_values=np.nan,确保程序能识别正确的缺失值标记。 - 运行代码前可以先检查数据类型:比如用
print(dataset.dtypes)查看各列类型,如果第2、3列是object(字符串)类型,先转成数值类型:X[:,1:3] = X[:,1:3].astype(float)
内容的提问来源于stack exchange,提问作者Dawood Zaidi
相关产品推荐
相关产品推荐

