使用Scikit-learn(sklearn)在不迭代列的情况下对整个DataFrame(所有列)进行输入



我想估算Panda DataFrame上的所有列。。。我能想到的唯一方法是一列接一列地做这件事,如下所示。。。

是否有一种操作可以在不遍历列的情况下估算整个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 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

如果您想要meanmedian,您可以执行以下操作:

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 Imputer,否则在我看来,一个更简单的选择是:

df = df.fillna(df.mean())
如果任何列包含NA,则

df.mean()将返回NA,从而使df.fillna()无法正常工作。一个合适的方法是使用np.nanamean()

相关内容

  • 没有找到相关文章

最新更新