我正在使用以下数据集:
表示缺少一些标有“?”的值。我想应用SimpleImputer库,我的代码如下:
t = Thread(target=threadFunction, args=(parameter, ))
所以我要替换所有的吗?来自所有列的均值,并返回一个新的数据框。问题是我遇到以下错误:
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
我想念什么?
谢谢
答案 0 :(得分:1)
您正在尝试推算"NaN"
,str
,而您将?
替换为np.NaN
。
用SimpleImputer
实例化np.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()
输出:
0
# No nan : Imputing successful
答案 1 :(得分:0)
在数据框上尝试以下操作:
df.info()
df['bare_nuclei'].unique()
您会注意到'bare_nuclei'不是数字变量。要获得任何均值归因,您需要传递数字数据(因此会出现无法转换为dtype('float64')
的错误。
替换'?'后可以将列转换为数字数据。带有“ NaN”
df['bare_nuclei'] = pd.to_numeric(df['bare_nuclei'])