2016-07-01 19 views
2

Ich habe folgende Frage: Ich habe einen Pandas-Datenrahmen, in dem fehlende Werte durch die Zeichenkette na gekennzeichnet sind. Ich möchte einen Imputer laufen lassen, um die fehlenden Werte durch den Mittelwert in der Spalte zu ersetzen. Nach Angaben der sklearn Dokumentation, sollte der Parameter missing_values mir helfen mit diesem:Python - SkLearn Drucker Verwendung

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”.

In meinem Verständnis bedeutet dies, dass, wenn ich

df = pd.read_csv(filename) 
imp = Imputer(missing_values='na') 
imp.fit_transform(df) 

schreiben, das würde bedeuten, dass die imputer etwas in die ersetzt Datenrahmen mit dem na Wert mit dem Mittelwert der Spalte. Stattdessen erhalte ich einen Fehler:

ValueError: could not convert string to float: na 

Was bin ich falsch interpretieren? Ist das nicht, wie der Drucker funktionieren sollte? Wie kann ich die na Strings durch den Mittelwert ersetzen, dann? Soll ich einfach ein Lambda dafür verwenden?

Vielen Dank!

Antwort

1

Da Sie sagen, dass Sie diese 'na' durch einen Mittelwert der Spalte ersetzen wollen, ich denke, die nicht fehlenden Werte sind in der Tat schwebt. Das Problem ist, dass Pandas die Zeichenfolge 'na' nicht als fehlenden Wert erkennt und daher die Spalte mit dtype object anstelle eines Geschmacks von float liest.

Typischer Fall, sollten Sie Folgendes beachten .csv Datei:

test.csv 

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

Mit dem naiven Import df = pd.read_csv('test.csv'), df.dtypes uns sagt, dass col1 von dtype object und col2 ist von dtype float64. Aber wie kommst du zu einem Haufen Objekte?

Die Lösung ist pd.read_csv() zu sagen, die Zeichenfolge 'na' als fehlender Wert zu interpretieren:

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

Der resultierende Datenrahmen hat beiden Spalten von dtype float64, und Sie können jetzt Ihre imputer verwenden. Hier

0

ist der Fehler war ich

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

In meinem Fall empfangen ich Problem hatte mit „Median“ -Strategie, ändert es zu bedeuten, oder most_frequent gearbeitet.