熊猫:使用SimpleImputer可以将数据帧转换为一系列吗?

时间:2019-12-27 10:39:59

标签: pandas

我有一个带有NaN的数据框。我想用列平均值填充它们。一切都很好,但是在应用下面的代码之后,数据框似乎已更改为一系列,所有值突然在小数点后都具有很多位置的精度,原始数据框的列名已丢失并替换为0, 1,2,我知道我可以重新创建/重置所有这些,但是可以使用SimpleImputer而无需更改数据的基础结构/类型吗?

impute = SimpleImputer(missing_values=np.nan, strategy='mean')
impute.fit(dfn)
dfn_mean=impute.transform(dfn)

1 个答案:

答案 0 :(得分:1)

我认为您只能对DataFrame.fillnamean使用pandas解决方案,其中默认情况下会忽略非数字列:

df = pd.DataFrame({
        'A':list('abcdef'),
         'B':[4,5,4,5,5,4],
         'C':[7,8,9,4,np.nan,3],
         'D':[1,3,5,7,1,0],
         'E':[5,3,6,9,np.nan,4],
         'F':list('aaabbb')
})

df = df.fillna(df.mean())
print (df)
   A  B    C  D    E  F
0  a  4  7.0  1  5.0  a
1  b  5  8.0  3  3.0  a
2  c  4  9.0  5  6.0  a
3  d  5  4.0  7  9.0  b
4  e  5  6.2  1  5.4  b
5  f  4  3.0  0  4.0  b

您的解决方案应更改为仅处理DataFrame.select_dtypes的浮点数列:

from sklearn.impute import SimpleImputer
impute = SimpleImputer(missing_values=np.nan,strategy='mean')

c = df.select_dtypes(np.floating).columns
df[c] = impute.fit_transform(df[c])
print (df)
   A  B    C  D    E  F
0  a  4  7.0  1  5.0  a
1  b  5  8.0  3  3.0  a
2  c  4  9.0  5  6.0  a
3  d  5  4.0  7  9.0  b
4  e  5  6.2  1  5.4  b
5  f  4  3.0  0  4.0  b

或者仅是数字,但随后将整数列转换为浮点数:

from sklearn.impute import SimpleImputer
impute = SimpleImputer(missing_values=np.nan,strategy='mean')

c = df.select_dtypes(np.number).columns
df[c] = impute.fit_transform(df[c])
print (df)
   A    B    C    D    E  F
0  a  4.0  7.0  1.0  5.0  a
1  b  5.0  8.0  3.0  3.0  a
2  c  4.0  9.0  5.0  6.0  a
3  d  5.0  4.0  7.0  9.0  b
4  e  5.0  6.2  1.0  5.4  b
5  f  4.0  3.0  0.0  4.0  b