2016-12-05 3 views
0

나는 누락 된 모든 데이터 ('?'로 표시)를 NaN에 입력하고 sklearn의 imputation 도구를 사용하여 평균을 산출하려고합니다. 평균값으로. 내 문제에 재현하기 위해, 나는 다음과 같이 내 코드를 포함했다 : 나는 Py를 2.7.12기계 학습 데이터를 입력하는 중에 물음표 ('?')를 NaN으로 바꾸는 오류

IDE로 PyCharm, 맥 OS X와 ​​아나콘다를 사용하는이 내 코드입니다 :

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에 대해서는 알지 못합니다.하지만 플로트 배열로 변환하려고 시도하고 '?'을 변환 할 수 없기 때문에 오류가 발생합니다. 하나에. '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

이것은 정확하게 올바르게 작동합니다! 정말 고맙습니다! –