Python - SkLearn Imputer用法

lte*_*e__ 5 python scikit-learn imputation

我有以下问题:我有一个pandas数据帧,其中缺少的值由字符串标记na.我想在它上面运行一个Imputer,用列中的平均值替换缺少的值.根据sklearn文档,参数missing_values应该帮助我:

missing_values:integer或"NaN",optional(default ="NaN")缺少值的占位符.所有出现的missing_values都将被估算.对于编码为np.nan的缺失值,请使用字符串值"NaN".

在我的理解中,这意味着,如果我写

df = pd.read_csv(filename)
imp = Imputer(missing_values='na')
imp.fit_transform(df)
Run Code Online (Sandbox Code Playgroud)

这意味着imputer用数据框的平均值替换数据框中的任何内容na.但是,我得到一个错误:

ValueError: could not convert string to float: na
Run Code Online (Sandbox Code Playgroud)

我误解了什么?这不是影像应该如何工作的吗?我怎样才能na用平均值替换字符串呢?我应该只使用lambda吗?

谢谢!

Alb*_*oso 4

既然你说你想'na'用列的平均值替换它们,我猜非缺失值确实是浮点数。问题是 pandas 不会将该字符串识别为缺失值,因此会使用 dtype而不是某种风格的 来'na'读取列。objectfloat

举个例子,考虑以下.csv文件:

 test.csv

 col1,col2
 1.0,1.0
 2.0,2.0
 3.0,3.0
 na,4.0
 5.0,5.0
Run Code Online (Sandbox Code Playgroud)

通过天真​​的导入df = pd.read_csv('test.csv')df.dtypes告诉我们col1is of dtypeobjectcol2is of dtype float64。但是如何获取一堆对象的平均值呢?

解决方案是告诉pd.read_csv()将字符串解释'na'为缺失值:

df = pd.read_csv('test.csv', na_values='na')
Run Code Online (Sandbox Code Playgroud)

生成的数据框具有 dtype 的两列float64,您现在可以使用您的输入器。