仅当列中的NaN少于给定数目时,如何用列均值替换NaN?

时间:2020-02-03 22:29:56

标签: python pandas nan

我有一个很大的数据集,有200行和6000多个列。

我已经知道Pandas函数可以用每列的平均值替换NaN:

df.fillna(df.mean())

我的问题是,我只想在NaN总数等于或小于3的那些列上使用它。 任何提示或解决方案将不胜感激。

1 个答案:

答案 0 :(得分:1)

以下方法应该起作用:

m = df.isna().sum(0).le(3)
df.loc[:,m] = df.loc[:,m].fillna(df.loc[:,m].mean(0))

检查测试数据框:

df = pd.DataFrame(np.random.choice([float('nan'), *range(3)], (10, 3)))

print(df)

   0    1    2
0  NaN  1.0  0.0
1  2.0  0.0  NaN
2  0.0  1.0  0.0
3  NaN  1.0  0.0
4  2.0  NaN  1.0
5  NaN  2.0  1.0
6  2.0  2.0  NaN
7  NaN  NaN  NaN
8  1.0  NaN  0.0
9  2.0  0.0  2.0

m = df.isna().sum(0).le(3)
df.loc[:,m] = df.loc[:,m].fillna(df.loc[:,m].mean(0))

print(df)

     0    1         2
0  NaN  1.0  0.000000
1  2.0  0.0  0.571429
2  0.0  1.0  0.000000
3  NaN  1.0  0.000000
4  2.0  1.0  1.000000
5  NaN  2.0  1.000000
6  2.0  2.0  0.571429
7  NaN  1.0  0.571429
8  1.0  1.0  0.000000
9  2.0  0.0  2.000000