我试图用python中的KNN填充缺失的值,所以我写了这段代码,但它不起作用。我得到这个错误";ValueError:无法将字符串转换为浮点值:"normal"我该怎么办?
import pandas as pd
df = pd.read_csv(r'df.csv')
from sklearn.impute import KNNImputer
imputer = KNNImputer(n_neighbors=5)
df = pd.DataFrame(imputer.fit_transform(df),columns = df.columns)
通常,为了替换NaN值,我们使用sklearn.impute.SimpleImputer
,它可以用您选择的值(平均值、样本中值或您想要的任何其他值(替换NaN
值。
from sklearn.impute import SimpleImputer
imp = SimpleImputer(missing_values=np.nan, strategy='mean')
df = imp.fit_transform(df)
我不知道你的df是什么样子的,但我想你可能不得不使用Ordinal或Label编码器,因为KNN估算器不适用于文本数据。
以下是您的指南:
https://medium.com/@kyawsawtoon/a-guide-knn-imputation-95e2dc496e
KNN方法将计算向量之间的距离,因此如果数据是分类的,则应将其转换为数值。例如,如果字符串代表标签,则可以使用一个hot对标签进行编码。
还有另一个python包实现KNN插补方法:impyte