2016-07-01 4 views
2

У меня вопрос: у меня есть фрейм данных pandas, в котором пропущенные значения отмечены строкой na. Я хочу запустить Imputer на нем, чтобы заменить отсутствующие значения средним значением в столбце. Согласно документации sklearn, параметр missing_values должен помочь мне с этим:Python - использование SkLearn для использования в режиме реального времени

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

В моем понимании, это означает, что если я пишу

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

, что будет означать, что imputer заменяет что-нибудь в dataframe с значением na со средним значением столбца. Однако вместо этого я получаю сообщение об ошибке:

ValueError: could not convert string to float: na 

Что я неправильно интерпретирую? Разве это не так, как должен работать компьютер? Как я могу заменить строки na на среднее значение? Должен ли я просто использовать лямбда для этого?

Спасибо!

ответ

1

Поскольку вы говорите, что хотите заменить эти 'na' на среднее значение столбца, я предполагаю, что значения без пропусков действительно являются поплавками. Проблема в том, что pandas не распознает строку 'na' как недостающее значение и поэтому считывает столбец с dtype object вместо некоторого аромата float.

пример, рассмотрим следующий .csv файл:

test.csv 

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

С наивной импорта df = pd.read_csv('test.csv'), df.dtypes говорит нам, что col1 имеет DTYPE object и col2 имеет DTYPE float64. Но как вы относитесь к совокупности объектов?

Решение сказать pd.read_csv() интерпретировать строку 'na' как отсутствующее значение:

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

В результате dataframe имеет обе колонны DTYPE float64, и теперь вы можете использовать imputer.

0

Здесь ошибка я получал

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

В моем случае я имел проблемы с «срединной» стратегии, изменяя это означает или most_frequent работал.

Смежные вопросы