Ich versuche alle fehlenden Daten (wie durch '?' Angegeben) in NaN
zu setzen und benutze das Imputationswerkzeug von sklearn
, um sie zu mitteln in einen Mittelwert. Um auf mein Problem reproduzierbar zu sein, ich habe meinen Code wie unten aufgeführt: Ich benutze PyCharm als IDE, Mac OS X und anaconda auf Py 2.7.12Fehler beim Drehen eines Fragezeichens ('?') In NaN beim Eingeben von Maschinenlerndaten
Dies ist mein Code:
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)
Und hier ist meine Fehlermeldung
/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
Bitte helfen Sie mir den verwüsteten Anfänger QAQ ...
Ich weiß nichts über sklearn im Besonderen, aber der Fehler, den Sie erhalten, ist, weil es versucht, in ein Float-Array zu konvertieren, und nicht '?' zu einem. 'NaN' wäre in Ordnung, also konvertiere vielleicht einfach alles '?' dazu vor dem Parsen? – Iluvatar
@Iluvatar Danke ... Wie kann ich diese "?" in NaN? Sorry ... Ich weiß, dass diese Frage ein bisschen albern ist ... –
Ah, ich sehe, du benutzt 'na_values = ["?"] ', Also sollte es das fangen. Es kann sein, dass dein 'sep'' ', \ s'' ist, aber es sieht so aus, als wäre es nur eine CSV, die du dort hast (keine Leerzeichen zwischen Kommas). Wenn das der Fall ist, würde es die ganze Zeile als eine einzige Spalte nehmen. – Iluvatar