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吗?
谢谢!
既然你说你想'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 dtypeobject和col2is of dtype float64。但是如何获取一堆对象的平均值呢?
解决方案是告诉pd.read_csv()将字符串解释'na'为缺失值:
df = pd.read_csv('test.csv', na_values='na')
Run Code Online (Sandbox Code Playgroud)
生成的数据框具有 dtype 的两列float64,您现在可以使用您的输入器。
| 归档时间: |
|
| 查看次数: |
2084 次 |
| 最近记录: |