![](/img/trans.png)
[英]Folium TypeError: ufunc 'isnan' not supported for the input types
[英]TypeError: ufunc 'isnan' not supported for the input types, Using Imputer for NaN values
我是 python 和 pandas 的新手。 我正在尝试预处理一个由数字和分类特征组成的大数据框,并且在某些列中有 NaN 值。 首先,我尝试获取特征矩阵,然后使用 Imputer 计算 Nan 值的平均值或中值。
这是数据框
MSSubClass MSZoning LotFrontage LotArea Street LotShape LandContour \
0 60 RL 65.0 8450 Pave Reg Lvl
1 20 RL 80.0 9600 Pave Reg Lvl
2 60 RL 68.0 11250 Pave IR1 Lvl
3 70 RL 60.0 9550 Pave IR1 Lvl
4 60 RL 84.0 14260 Pave IR1 Lvl
5 50 RL 85.0 14115 Pave IR1 Lvl
6 20 RL 75.0 10084 Pave Reg Lvl
7 60 RL NaN 10382 Pave IR1 Lvl
8 50 RM 51.0 6120 Pave Reg Lvl
9 190 RL 50.0 7420 Pave Reg Lvl
10 20 RL 70.0 11200 Pave Reg Lvl
11 60 RL 85.0 11924 Pave IR1 Lvl
代码:只是将 LotFrontage(索引号 = 2)中的 Nan 值更改为列的平均值
imputer = Imputer(missing_values='Nan',strategy="mean",axis=0)
features = reduced_data.iloc[:,:-1].values
imputer.fit(features[:,2])
当我运行它时,出现错误:
TypeError: ufunc 'isnan' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''
第一:我的做法是否正确? 第二:如何处理Error?
谢谢
注意Nan和NaN的区别(注意最后的大写N)你用过Nan
imputer = Imputer(missing_values='NaN',strategy="mean",axis=0)
将“Nan”替换为“NaN”,您将不会收到此错误
试试这个,这是一个工作代码的例子
from sklearn.preprocessing import Imputer
imputer = Imputer(missing_values = np.nan, strategy = 'mean', axis =0)
imputer = imputer.fit(X[:,1:3])
X[:,1:3] = imputer.transform(X[:,1:3])
我猜是由于字符串“Nan”,您的 LotFrontage 列数据存储为对象数据类型。使用此查找。它很可能会给出对象/字符串。
print(reduced_data.LotFrontage.values.dtype)
Imputer 仅适用于浮点数。
第一种方法:
您可以执行以下操作:1) 将列类型转换为 Float 2) 找出列 LotFrontage 的平均值 3) 使用 pandas dataframe 函数 fillna 填充 Dataframe 中的 NAN。
reduced_data.LotFrontage = pd.to_numeric(reduced_data.LotFrontage, errors='coerce')
m = reduced_data.LotFrontage.mean(skipna=True)
reduced_data.fillna(m)
上面的代码将在存在 NAN 的任何地方填充 Dataframe。
第二种方法:
reduced_data.LotFrontage = pd.to_numeric(reduced_data.LotFrontage, errors='coerce')
imputer = Imputer()
features = reduced_data.iloc[:,:-1].values
imputer.fit(features[:,2])
在 missing_value 参数中使用 'NaN' 而不是 'Nan': imputer=Imputer(missing_values='NaN',strategy='mean',axis=0)
这应该工作
imputer = Imputer(missing_values='NaN', strategy='mean', axis=0)
imputer = imputer.fit(df.iloc[:, 2:3])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.