2016-07-01 12 views
2

私は次の質問をしています:欠損値が文字列naによってマークされているpandasデータフレームがあります。私はそれにImputerを実行して、欠損値を列の平均値に置き換えたいとします。 sklearnのドキュメントによると、パラメータmissing_valuesはこれで私を助けてください。Python - SkLearn Imputer usage

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 

私は何を誤解していますか?これは、コンピュータユーザーがどのように動作すべきか? na文字列を平均値に置き換えるにはどうすればよいですか?私はちょうどそれのためのラムダを使用する必要がありますか?

ありがとうございました!

答えて

1

'na'を列の平均で置き換えたいと言いますから、欠損値は実際には浮動小数点であると推測しています。問題は、パンダが文字列'na'を欠損値として認識しないため、floatの代わりにdtype objectの列を読み込むことです。 df.dtypescol1はDTYPE objectであり、col2はDTYPE float64であることを教えてくれる、素朴な輸入df = pd.read_csv('test.csv')

test.csv 

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

:ポイントで

ケースは、以下の.csvファイルを検討してください。しかし、どのようにオブジェクトの束の平均を取るのですか?

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

結果のデータフレームは、DTYPE float64の両方の列を持っており、あなたが今、あなたのimputerを使用することができます。

ソリューションは、欠損値として文字列'na'を解釈するpd.read_csv()を伝えることです。ここで

0

は私が私の場合は

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

を受けたエラーである私はそれが働いた意味やmost_frequentする変更、「中央値」戦略に問題がありました。