我想按比例在数据集中填充缺少的性别数据。
我使用布尔值索引和head或tail函数选择我想要的顶部数据,但是当我使用fillna函数时,它不起作用。但是在我尝试之后,它仅在没有布尔值索引的情况下运行,我怎么能得到示例中的前3个空值,并用0填充。
a = pd.DataFrame(np.random.randn(50).reshape((10,5)))
a[0][1,3,4,6,9] = np.nan
a[0][a[0].isnull()].head(3).fillna(value = '0', inplace = True)
数据框未填满NaN
答案 0 :(得分:1)
您应该使用loc函数,否则您将永远不会赋值。这是您可以做的:
a.loc[a[0].isnull().index[0:3], 0] = 0
In [1] : print(a)
Out[1] : 0 1 2 3 4
0 0.786182 -0.474953 -0.285881 -0.285502 -0.541957
1 0.000000 0.648042 1.104871 1.237512 -0.156453
2 -1.327987 1.851947 -0.522366 0.631213 -0.960167
3 0.000000 0.561111 -0.945439 -1.414678 0.433246
4 0.000000 -1.463828 0.141122 1.468288 0.649452
5 1.554890 -0.411142 -1.162577 -0.186640 0.774959
6 0.000000 -0.061410 -0.312673 -1.324719 1.763257
7 0.587035 0.265302 -0.793746 -0.148613 0.059330
8 0.909685 1.169786 -1.289559 -0.090185 -0.024272
9 0.000000 0.606329 -0.806034 1.102597 0.820976
答案 1 :(得分:-1)
从数据开始:
a = pd.DataFrame(np.random.randn(50).reshape((10,5)))
a[0][1,3,4,6,9] = np.nan
给予
0 1 2 3 4
0 -0.388759 -0.660923 0.385984 0.933920 0.164083
1 NaN -0.996237 -0.384492 0.191026 -1.168100
2 -0.773971 0.453441 -0.543590 0.768267 -1.127085
3 NaN -1.051186 -2.251681 -0.575438 1.642082
4 NaN 0.123432 1.063412 -1.556765 0.839855
5 -1.678960 -1.617817 -1.344757 -1.469698 0.276604
6 NaN -0.813213 -0.077575 -0.064179 1.960611
7 1.256771 -0.541197 -1.577126 -1.723853 0.028666
8 0.236197 0.868503 -1.304098 -1.578005 -0.632721
9 NaN -0.227659 -0.857427 0.010257 -1.884986
现在您要处理零列,因此我们使用限制为3的fillna并替换该列
a[0].fillna(0, inplace=True, limit=3)
给予
0 1 2 3 4
0 -0.388759 -0.660923 0.385984 0.933920 0.164083
1 0.000000 -0.996237 -0.384492 0.191026 -1.168100
2 -0.773971 0.453441 -0.543590 0.768267 -1.127085
3 0.000000 -1.051186 -2.251681 -0.575438 1.642082
4 0.000000 0.123432 1.063412 -1.556765 0.839855
5 -1.678960 -1.617817 -1.344757 -1.469698 0.276604
6 NaN -0.813213 -0.077575 -0.064179 1.960611
7 1.256771 -0.541197 -1.577126 -1.723853 0.028666
8 0.236197 0.868503 -1.304098 -1.578005 -0.632721
9 NaN -0.227659 -0.857427 0.010257 -1.884986