2016-12-05 4 views
0

私はすべての欠損データ( '?'で示される)をNaNに代入しようとしており、sklearnの補間ツールを使って平均値に変換する。私の問題に再現性があることが、私は以下のように私のコードが含まれている:私はIDEはMac OS XとしてPyCharmを使用し、アナコンダのPy 2.7.12に機械学習データを代入している間に疑問符( '?')をNaNに変換するエラー

これは私のコードです:

import matplotlib.pyplot as plt 
import numpy as np 
import pandas as pd 
df = pd.read_csv('http://archive.ics.uci.edu/ml/machine-learning-databases/communities/communities.data', header=None, sep=',\s', na_values=["?"]) 
df.tail() 
from sklearn.preprocessing import Imputer 
imr = Imputer(missing_values='NaN', strategy='mean', axis=0) 
imr= imr.fit(df) 

そして、ここに私のエラーメッセージがある

/Users/zdong/anaconda/bin/python/Users/zdong/PycharmProjects/ml/crim_workingfile.py 
/Users/zdong/PycharmProjects/ml/crim_workingfile.py:4: ParserWarning: Falling back to the 'python' engine because the 'c' engine does not support regex separators (separators > 1 char and different from '\s+' are interpreted as regex); you can avoid this warning by specifying engine='python'. 
df = pd.read_csv('http://archive.ics.uci.edu/ml/machine-learning databases/communities/communities.data', header=None, sep=',\s', na_values=["?"]) 
Traceback (most recent call last): 
    File "/Users/zdong/PycharmProjects/535_final/535_workingfile.py", line 8, 
in <module> 
imr= imr.fit(df) 
    File "/Users/zdong/anaconda/lib/python2.7/site-packages/sklearn/preprocessing/imputation.py", 
line 156, in fit 
force_all_finite=False) 
    File "/Users/zdong/anaconda/lib/python2.7/site-packages/sklearn/utils/validation.py" 
line 382, in check_array 
array = np.array(array, dtype=dtype, order=order, copy=copy) 
ValueError: invalid literal for float(): 6,?,?,Ontariocity,10,0.2,0.78,0.14,0.46,0.24,0.77,0.5,0.62,0.4,0.17,0.21,1,0.4,0.73,0.22,0.25,0.26,0.47,0.29,0.36,0.24,0.28,0.32,0.22,0.27,0.25,0.29,0.16,0.35,0.5,0.55,0.16,0.47,0.58,0.53,0.2,0.6,0.24 

私は壊滅的な初心者QAQを手伝ってください...

+0

特にsklearnについてはわかりませんが、エラーは浮動小数点型配列に変換しようとしていて、 '?'を変換できないためです。 1に。 'NaN'は大丈夫でしょう。解析する前にそれに? – Iluvatar

+0

@Iluvatarありがとう...どうすればこれらを変換できますか? NaNに?申し訳ありません...私はこの質問がちょっとばかだと知っています... –

+0

ああ、あなたは 'na_values = ["? "]'を使っているのを見ています。あなたの 'sep'は' '、\ s''であるかもしれませんが、純粋にそこにあるCSVのようです(コンマの間にスペースは入れません)。そうであれば、行全体が単一の列として扱われます。 – Iluvatar

答えて

0

私は実際の答えのために十分だと思います。あなたのデータを見ると、最初の5つの列は都市に関する情報(名前、他の値> = 1)のように見え、残りは最後の行にあるfitのデータのように見えます。

あなたの問題は、フィットがすべてのデータをフロートにキャストしようとしていて、明らかに都市名で失敗するということです。フィットに渡されるデータは、おそらく最初の5つの列(おそらく4つ、列5がバイアスの場合は?)以外のすべてになります。いずれにしても、次のように試してみてください:

df = pd.read_csv('communities.data', header=None, na_values=["?"], usecols=range(5, 128)) 

そして、必要な列に応じて5を変更してください。

+0

これは正確に正しく動作します!どうもありがとうございます! –

関連する問題