使用简单的计算机与熊猫数据框?

时间:2019-09-05 03:12:22

标签: python pandas scikit-learn

我正在使用以下数据集:

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

表示缺少一些标有“?”的值。我想应用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

我想念什么?

谢谢

2 个答案:

答案 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'])