2016-07-01 201 views
2

我有以下问题:我有一个熊猫数据框,其中缺少的值由字符串na标记。我想在它上面运行一个Imputer,用列中的平均值替换缺失的值。按照sklearn文件,该参数missing_values要帮我这个:Python - SkLearn Imputer用法

missing_values : integer or “NaN”, optional (default=”NaN”) The placeholder for the missing values. All occurrences of missing_values will be imputed. For missing values encoded as np.nan, use the string value “NaN”.

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

df = pd.read_csv(filename) 
imp = Imputer(missing_values='na') 
imp.fit_transform(df) 

这将意味着imputer在替换什么数据帧与na值和列的平均值。但是,我得到一个错误:

ValueError: could not convert string to float: na 

我在误解什么?这不是如何工作的印象?那么我怎样才能用字符串替换它的意思呢?我应该使用lambda吗?

谢谢!

回答

1

既然你说你想用列的平均值代替这些'na',那么我猜测这些非缺失值实际上是浮点数。问题在于熊猫不会将字符串'na'识别为缺失值,因此会读取dtype为object的列,而不是float的某种风格。在点

案例,请考虑以下.csv文件:

test.csv 

col1,col2 
1.0,1.0 
2.0,2.0 
3.0,3.0 
na,4.0 
5.0,5.0 

随着天真进口df = pd.read_csv('test.csv')df.dtypes告诉我们,col1是D型objectcol2是D型float64的。但是,你如何看待一堆物体的意思呢?

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

df = pd.read_csv('test.csv', na_values='na') 

得到的数据帧具有D型float64的两列,你现在可以使用imputer。

0

这是我收到

IndexError: in the future, 0-d boolean arrays will be interpreted as a valid boolean index

在我来说,我有问题与“中间”的策略,改变它的意思或most_frequent工作的错误。