2016-07-25 3 views
0

я сделать imutation для одной переменной & вернуть его к тому же переменномуПетли для вменения

X = pd.DataFrame(df, columns=['a']) 
imp = Imputer(missing_values='NaN', strategy='median', axis=0) 
X = imp.fit_transform(X) 
df['a'] = X 

Однако у меня есть много переменных & хочет использовать цикл как этого

f = df[[a, b, c, d, e]] 
for k in f: 
    X = pd.DataFrame(df, columns=k) 
    imp = Imputer(missing_values='NaN', strategy='median', axis=0) 
    X = imp.fit_transform(X) 
    df.k = X 

но:

TypeError: Index(...) must be called with a collection of some kind, 'a' was passed 

Как использовать цикл для вменения & возвращать переменные в dataframe?

ответ

1

DataFrame выполняет итерации по именам столбцов, поэтому k == 'a' в этом случае, а не в первом столбце. Вы можете реализовать его с помощью

f = df[[a, b, c, d, e]] 
for k in f: 
    X = df[k] 
    imp = Imputer(missing_values='NaN', strategy='median', axis=0) 
    X = imp.fit_transform(X) 
    df[k] = X 

Но вы, вероятно, просто хотите создать новую фреймворк данных, используя применимый столбец. Что-то вроде

df = df.apply(imp.fit_transform, raw=True, broadcast=True) 

или панд имеют свой собственные методы для работы с отсутствующими данными: http://pandas.pydata.org/pandas-docs/stable/missing_data.html#filling-with-a-pandasobject

1
for k in f: 
    X = pd.DataFrame(df, columns=[k]) 
    imp = Imputer(missing_values='NaN', strategy='median', axis=0) 
    X = imp.fit_transform(X) 
    df[k] = X