使用Scikit-learn(sklearn)插入整个DataFrame(所有列),而不迭代列

O.r*_*rka 17 python machine-learning dataframe scikit-learn

我想把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
Run Code Online (Sandbox Code Playgroud)

O.r*_*rka 33

如果你想要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
Run Code Online (Sandbox Code Playgroud)

如果你想用0或其他东西填充它们,你可以随时做:

DF[DF.isnull()] = 0
Run Code Online (Sandbox Code Playgroud)

  • 在原始numpy数组从任何sklearn Imputer中出来之后,包含用原始列名和索引恢复DataFrame类型的步骤+1 (4认同)
  • 我发现了很多不好的例子,这是第一个对我有意义的例子。谢谢! (2认同)

小智 6

除非您Imputer出于某种原因特别需要使用 sklearn ,在我看来,一个更简单的选择就是这样做:

df = df.fillna(df.mean())
Run Code Online (Sandbox Code Playgroud)