Python 使用Scikit learn(sklearn)输入整个数据帧(所有列),无需迭代列

Python 使用Scikit learn(sklearn)输入整个数据帧(所有列),无需迭代列,python,machine-learning,scikit-learn,dataframe,Python,Machine Learning,Scikit Learn,Dataframe,我想对熊猫数据框中的所有列进行插补…我能想到的唯一方法是按列进行插补,如下所示 是否有一种操作可以在不迭代列的情况下输入整个数据帧? #!/usr/bin/python from sklearn.preprocessing import Imputer import numpy as np import pandas as pd #Imputer fill_NaN = Imputer(missing_values=np.nan, strategy='mean', axis=1) #Model

我想对熊猫数据框中的所有列进行插补…我能想到的唯一方法是按列进行插补,如下所示

是否有一种操作可以在不迭代列的情况下输入整个数据帧?

#!/usr/bin/python
from sklearn.preprocessing import Imputer
import numpy as np
import pandas as pd

#Imputer
fill_NaN = Imputer(missing_values=np.nan, strategy='mean', axis=1)

#Model 1
DF = pd.DataFrame([[0,1,np.nan],[2,np.nan,3],[np.nan,2,5]])
DF.columns = "c1.c2.c3".split(".")
DF.index = "i1.i2.i3".split(".")

#Impute Series
imputed_DF = DF
for col in DF.columns:
    imputed_column = fill_NaN.fit_transform(DF[col]).T
    #Fill in Series on DataFrame
    imputed_DF[col] = imputed_column

#DF
#c1  c2  c3
#i1   0   1 NaN
#i2   2 NaN   3
#i3 NaN   2   5

#imputed_DF
#c1   c2  c3
#i1   0  1.0   4
#i2   2  1.5   3
#i3   1  2.0   5

如果您想要
平均值
中值
,可以执行以下操作:

fill_NaN = Imputer(missing_values=np.nan, strategy='mean', axis=1)
imputed_DF = pd.DataFrame(fill_NaN.fit_transform(DF))
imputed_DF.columns = DF.columns
imputed_DF.index = DF.index
如果您想用0或其他东西填充它们,您可以随时执行以下操作:

DF[DF.isnull()] = 0

除非出于某种原因,您特别需要使用sklearn
插补器,否则在我看来,更简单的选择是:

df = df.fillna(df.mean())

如果任何列包含NA,df.mean()将返回NA,因此使df.fillna()无法按预期运行。正确的方法是使用np.nanmean()

我发现了很多不好的例子,这是第一个对我有意义的例子。非常感谢。谢谢我还没有从我的答案中得到任何好的反馈,所以我真的很感激。+1在原始numpy数组从任何sklearn插补器中出来之后,包括使用原始列名和索引恢复数据帧类型的步骤,这可能是我现在要做的。可能是类似于df[df.isnull()]=x
的东西。我不认为我会在真实世界的数据集中对任何东西进行
插补。