2016-07-01 214 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工作的錯誤。