2016-07-26 29 views
3

Ich lerne, wie man Imputer auf Python verwendet.Imputer auf einige Dataframe-Spalten in Python

Dies ist mein Code:

df=pd.DataFrame([["XXL", 8, "black", "class 1", 22], 
["L", np.nan, "gray", "class 2", 20], 
["XL", 10, "blue", "class 2", 19], 
["M", np.nan, "orange", "class 1", 17], 
["M", 11, "green", "class 3", np.nan], 
["M", 7, "red", "class 1", 22]]) 

df.columns=["size", "price", "color", "class", "boh"] 

from sklearn.preprocessing import Imputer 

imp=Imputer(missing_values="NaN", strategy="mean") 
imp.fit(df["price"]) 

df["price"]=imp.transform(df["price"]) 

Doch diese steigt die folgende Fehlermeldung: Valueerror: Länge des Wertes entspricht nicht Länge Index

Was mit meinem Code falsch ???

Vielen Dank für

Antwort

1

helfen Ich glaube, Sie die Achse für die imputer angeben möchten, dann transponieren das Array es zurückgibt:

import pandas as pd 
import numpy as np 

df=pd.DataFrame([["XXL", 8, "black", "class 1", 22], 
["L", np.nan, "gray", "class 2", 20], 
["XL", 10, "blue", "class 2", 19], 
["M", np.nan, "orange", "class 1", 17], 
["M", 11, "green", "class 3", np.nan], 
["M", 7, "red", "class 1", 22]]) 

df.columns=["size", "price", "color", "class", "boh"] 

from sklearn.preprocessing import Imputer 

imp=Imputer(missing_values="NaN", strategy="mean",axis=1) #specify axis 
q = imp.fit_transform(df["price"]).T #perform a transpose operation 


df["price"]=q 
print df 
+0

Vielen Dank Ryan. Sehr nützlich. – user3623123

+0

Leider funktioniert das nicht für mich :(ValueError: Erwartete 2D-Array, bekam 1D-Array stattdessen: – Indi

8

Dies liegt daran, Imputer in der Regel mit Datenrahmen verwendet, anstatt Serie. Eine mögliche Lösung ist:

imp=Imputer(missing_values="NaN", strategy="mean") 
imp.fit(df[["price"]]) 
df["price"]=imp.transform(df[["price"]]).ravel() 

# Or even 
imp=Imputer(missing_values="NaN", strategy="mean") 
df["price"]=imp.fit_transform(df[["price"]]).ravel()