将NaN值替换为每列的特定值

时间:2019-11-21 05:38:03

标签: python pandas

我有一个包含值和一些NaN的数据框。现在我有了列的平均值,我想将特定列的平均值插入NaN值。例如:

ColA and ColB have NaN to be replaced with the value of mean I have

我对ColA和ColB表示平均值。我想将它们插入NaN位置。我可以使用replace方法单独进行操作。但是对于许多专栏,还有其他方法可以实现这一目标吗?

2 个答案:

答案 0 :(得分:0)

编辑:

如果已经有了Series with means,则只能使用DataFrame.fillna

df = pd.DataFrame({
        'A':list('abcdef'),
         'B':[4,np.nan,4,5,5,4],
         'C':[7,8,9,4,2,3],
         'D':[1,3,5,np.nan,1,0],
         'E':[np.nan,3,6,np.nan,2,4],
         'F':list('aaabbb')
})

means = pd.Series([10,20], index=['B','E'])

df= df.fillna(means)
print (df)
   A     B  C    D     E  F
0  a   4.0  7  1.0  20.0  a
1  b  10.0  8  3.0   3.0  a
2  c   4.0  9  5.0   6.0  a
3  d   5.0  4  NaN  20.0  b
4  e   5.0  2  1.0   2.0  b
5  f   4.0  3  0.0   4.0  b

如果需要替换所有数字列中的缺失值,请使用meanDataFrame.fillna-因为mean排除了非数字列,所以起作用了

df = pd.DataFrame({
        'A':list('abcdef'),
         'B':[4,np.nan,4,5,5,4],
         'C':[7,8,9,4,2,3],
         'D':[1,3,5,np.nan,1,0],
         'E':[np.nan,3,6,np.nan,2,4],
         'F':list('aaabbb')
})

df1 = df.fillna(df.mean())
print (df1)
   A    B  C    D     E  F
0  a  4.0  7  1.0  3.75  a
1  b  4.4  8  3.0  3.00  a
2  c  4.0  9  5.0  6.00  a
3  d  5.0  4  2.0  3.75  b
4  e  5.0  2  1.0  2.00  b
5  f  4.0  3  0.0  4.00  b

如果需要将列指定为均值,则仅更改列名称列表的解决方案:

cols = ['D','B']
df[cols] = df[cols].fillna(df[cols].mean())
print (df)
   A    B  C    D    E  F
0  a  4.0  7  1.0  NaN  a
1  b  4.4  8  3.0  3.0  a
2  c  4.0  9  5.0  6.0  a
3  d  5.0  4  2.0  NaN  b
4  e  5.0  2  1.0  2.0  b
5  f  4.0  3  0.0  4.0  b

答案 1 :(得分:-1)

对于要填充的列尝试此操作。

  if( copy2.disciples_ )
    {   
        this->disciples_ = make_shared<Ninja>();
        this->disciples_->name_ = copy2.disciples_->name_;
        this->disciples_->disciples_= copy2.disciples_->disciples_;
    }   
    else
    {   
        this->disciples_ = copy2.disciples_;
    }