用随机数填充多个 Nan 值,而不仅仅是一个数字

Fill multiple Nan values with random numbers and not just one single number

我有一个包含多个 NaN 值的数据框。我想用随机数 between 0,1 填充每个。我试过 fillna 但这只用一个值填充了代码。

我们可以使用itterows但是它会消耗很多资源。我们还有什么办法可以做到吗?如果是,那么怎么做?以下是我的数据框的示例。

> df 
   a   b   c   d
0  1  10   na  na
1  2  20   40  30
2  24 na   na  na 

预期输出

> df 
   a     b     c     d
0  1    10     0.7   0.9
1  2    20     40    30
2  24   0.9    0.34  0.532

基本上替换 na (0,1)

之间的任何内容

您可以创建自己的公式和随机数:

在下面的解决方案中,我将 a 列与随机数相乘,并只取分数,因为你想要 0 到 1 之间的数字。

import pandas as pd 
import numpy as np
import random

df = pd.DataFrame({'a':[1,2,24], 'b':[10,20, np.nan],'c':[np.nan,40,np.nan],'d':[np.nan,30,np.nan]})

for c in df.columns:
    df[c] = np.where(df[c].isnull(),(df['a']*random.random())%1,df[c])

print(df)

输出:

     a          b          c          d                                                                                                
0   1.0  10.000000   0.526793   0.678061                                                                                                
1   2.0  20.000000  40.000000  30.000000                                                                                                
2  24.0   0.865441   0.643032   0.273461