我有一个很大的数据集,有200行和6000多个列。
我已经知道Pandas函数可以用每列的平均值替换NaN:
df.fillna(df.mean())
我的问题是,我只想在NaN总数等于或小于3的那些列上使用它。 任何提示或解决方案将不胜感激。
答案 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