Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pandas 熊猫:使用SimpleImputer将数据帧转换为一个系列?_Pandas - Fatal编程技术网

Pandas 熊猫:使用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

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

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