scikit learn - Pandas填充只包含NaN的行



我想结合sklearn的imputation和Panda的Ffill来填补缺失的数据。这是我的dataFrame df的样子

FeatA  FeatB  FeatC  FeatD
  B      A      B      D
 NaN    NaN    NaN    NaN
  A      A      B       C
 NaN     A      A       A
 NaN     B      A       A

我想使用Ffill来填充仅包含NaN(例如行2)的行,与先前的值。

如果行只包含几个NaN,例如,如果至少有一个值,使用imputation用该行中最频繁的值填充NaN。

我使用LabelEncoder将字符串值转换为整数-它是按字母顺序排列的。A=0, B=1, C=2, D = 3。为了确保NaN得到值4,我使用data = df.fillna("Z")

将NaN转换为"Z"

然后我计算数据,以便任何具有Z的值都填充行-中最频繁的值imp = Imputer(missing_values=4, strategy= 'most_frequent', axis=1)

所以,我想用ffill填充只有NaN的行。

然后我使用LabelEncoder和imputation来填充行中最频繁的值的其他NaN

如果我可以选择只包含NaN的行,并仅对这些行应用ffill函数,那么我可以在另一个Nan上使用imputation。我该怎么做呢?

您可以首先复制Nan仅行与它的前一个值,并继续如下所示:

## Select rows containing all Nan values and replace them with the preceding values
In [2]: df.loc[df.isnull().all(axis=1), :] = df.ffill()    
In [3]: df.fillna('Z', inplace=True)

初始化LabelEncoder并执行fit:

In [4]: enc = LabelEncoder()
In [5]: enc.fit(np.unique(df.values))
Out[5]: LabelEncoder()
In [6]: df = df.apply(enc.transform)

用最频繁的元素沿列计算缺失值:

In [7]: imp = Imputer(missing_values=4, strategy='most_frequent', axis=1)
In [8]: imp.fit_transform(df)
Out[8]: 
array([[ 1.,  0.,  1.,  3.],
       [ 1.,  0.,  1.,  3.],
       [ 0.,  0.,  1.,  2.],
       [ 0.,  0.,  0.,  0.],
       [ 0.,  1.,  0.,  0.]])

相关内容

  • 没有找到相关文章

最新更新