Я хочу приписать столбцу фрейма данных Bare Nuclei с медианой, и я получил эту ошибку ("должен быть str, а не int", "произошел в индексе Bare Nuclei"), следующий код представляет уникальное значение данных столбца [ 'Bare Nuclei'
data['Bare Nuclei'].unique()
array(['1', '10', '2', '4', '3', '9', '7', '?', '5', '8', '6'],
dtype=object)
Тогда я попытался заменить ?
с nan
а затем приложить nan
с медианным, но я получил вышеупомянутую ошибку
data['Bare Nuclei'] = data['Bare Nuclei'].replace('?',np.nan)
#data['Bare Nuclei'].fillna()
data.apply(lambda x: x.fillna(x.mean()),axis=0)
Чтобы проверить данные, можно найти по этой ссылке https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/
это Коррекция, и она работает
data['Bare Nuclei'] = data['Bare Nuclei'].replace('?',np.nan).astype(float)
data['Bare Nuclei'] = data['Bare Nuclei'].fillna((data['Bare Nuclei'].median()))
Вы получили ошибку, потому что значения, хранящиеся в столбце 'Bare Nuclei'
, сохраняются как строки, но для функции mean()
требуются номера. Вы можете видеть, что они являются строками в результате вашего вызова .unique()
.
После замены '?'
символов, вы можете преобразовать серию в числа, используя .astype(float)
:
data['Bare Nuclei'] = data['Bare Nuclei'].replace('?',np.nan)
data['Bare Nuclei'] = data['Bare Nuclei'].astype(float).apply(lambda x: x.fillna(x.mean()))