将 Simple Imputer 与 Pandas 数据框一起使用?

Lit*_*tle 2 python pandas scikit-learn

我正在使用以下数据集:

https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data

它说有一些用“?”标记的缺失值。我想应用 SimpleImputer 库,我的代码如下:

file="breast_cancer"
df=pd.read_csv(file,names=['id', 'clump_thickness','unif_cell_size',
                                                         'unif_cell_shape', 'marg_adhesion', 'single_epith_cell_size',
                                                         'bare_nuclei', 'bland_chromatin', 'normal_nucleoli','mitoses','class'])
df.replace('?',np.NaN,inplace=True)
imp=SimpleImputer(missing_values="NaN")
idf=pd.DataFrame(imp.fit_transform(df))
idf.columns=df.columns
idf.index=df.index
Run Code Online (Sandbox Code Playgroud)

所以我想替换所有的?来自所有具有均值的列的值,并返回一个新的数据框。问题是我收到以下错误:

Input contains NaN, infinity or a value too large for dtype('float64').
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

谢谢

Chr*_*ris 8

您正在尝试估算 a "NaN"、 a str,而您已替换?np.NaN

实例化SimpleImputernp.nan和正常工作:

df.replace('?',np.NaN,inplace=True)
imp=SimpleImputer(missing_values=np.NaN)
idf=pd.DataFrame(imp.fit_transform(df))
idf.columns=df.columns
idf.index=df.index

idf['bare_nuclei'].isna().sum()
Run Code Online (Sandbox Code Playgroud)

输出:

0
# No nan : Imputing successful
Run Code Online (Sandbox Code Playgroud)