使用 Scikit-learn (sklearn) 估算整个 DataFrame(所有列)而不迭代列
Impute entire DataFrame (all columns) using Scikit-learn (sklearn) without iterating over columns
我想在 pandas 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
如果您想要 mean
或 median
,您可以这样做:
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() 将 return NA,因此使 df.fillna() 无法按预期运行。正确的方法是使用 np.nanmean()
我想在 pandas 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
如果您想要 mean
或 median
,您可以这样做:
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())
df.mean() 将 return NA,因此使 df.fillna() 无法按预期运行。正确的方法是使用 np.nanmean()