Pandas 熊猫:使用SimpleImputer将数据帧转换为一个系列?
我有一个数据框和一些NaN。我想用平均值列来填充它们。这一切都很好,但在应用下面的代码后,数据帧似乎已更改为一个系列,所有值在小数点后突然具有许多位的精度,原始数据帧的列名已丢失并替换为0,1,2,我知道我可以重新创建/重置所有这些,但是否可以使用SimpleImputer而不更改数据的底层结构/类型Pandas 熊猫:使用SimpleImputer将数据帧转换为一个系列?,pandas,Pandas,我有一个数据框和一些NaN。我想用平均值列来填充它们。这一切都很好,但在应用下面的代码后,数据帧似乎已更改为一个系列,所有值在小数点后突然具有许多位的精度,原始数据帧的列名已丢失并替换为0,1,2,我知道我可以重新创建/重置所有这些,但是否可以使用SimpleImputer而不更改数据的底层结构/类型 impute = SimpleImputer(missing_values=np.nan, strategy='mean') impute.fit(dfn) dfn_mean=impute.tra
impute = SimpleImputer(missing_values=np.nan, strategy='mean')
impute.fit(dfn)
dfn_mean=impute.transform(dfn)
我认为您只能将pandas解决方案与和
mean
一起使用,其中默认情况下会忽略非数字列:
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
您的解决方案应通过以下方式更改为仅处理浮动列:
或仅数值列,但整数列将转换为浮点数:
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
谢谢我认为你的解决方案更简单。一个问题:是否可以将fillna限制在某些列上?@Wasteland-当然,您可以使用
df=df.fillna(df['col1','col2','col3']].mean())
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