numpy用一个序列去填充另一个序列的缺失值

numpy用一个序列去填充另一个序列的缺失值

有时我们需要用一个序列去填充另一个序列的缺失值。比如处理周期性数据时,想要用周期的均值来填充缺失的数据,举例说明:

data = np.array([[1.15,2.31,3.14,4.27,2.09],[1.11,2.18,3.25,4.03,2.27],[1.20,np.nan,np.nan,4.41,2.11],[0.99,1.98,3,4.14,np.nan]])
data
Out[-]: 
array([[1.15, 2.31, 3.14, 4.27, 2.09],
       [1.11, 2.18, 3.25, 4.03, 2.27],
       [1.2 ,  nan,  nan, 4.41, 2.11],
       [0.99, 1.98, 3.  , 4.14,  nan]])

在这个数组中,每行对应着一个周期,每个周期的数据都服从 [ 1. ? , 2. ? , 3. ? , 4. ? , 2. ? ] [1.?, 2.?, 3.?, 4.?, 2.?] [1.?,2.?,3.?,4.?,2.?]的规律,在填充数组中的缺失值时自然想到使用每列的均值。可使用np.nanmean()计算除去空值以外其他值的均值:

data_mean = np.nanmean(data,axis=0)
data_mean
Out[-]: array([1.1125    , 2.15666667, 3.13      , 4.2125    , 2.15666667])

用2.157和3.13填充data[2,1:2]位置的缺失值:

data[2,:][np.isnan(data[2,:])] = data_mean[np.isnan(data[2,:])]

data
Out[-]: 
array([[1.15      , 2.31      , 3.14      , 4.27      , 2.09      ],
       [1.11      , 2.18      , 3.25      , 4.03      , 2.27      ],
       [1.2       , 2.15666667, 3.13      , 4.41      , 2.11      ],
       [0.99      , 1.98      , 3.        , 4.14      ,        nan]])

这行命令的意思是,首先先确定缺失值的位置,然后找到均值中对应位置的值,将它们按顺序赋给缺失值。
最后再把最后一个缺失值填充上,只需要改一下要填充的位置就好了:

data[3,:][np.isnan(data[3,:])] = data_mean[np.isnan(data[3,:])]
data
Out[-]: 
array([[1.15      , 2.31      , 3.14      , 4.27      , 2.09      ],
       [1.11      , 2.18      , 3.25      , 4.03      , 2.27      ],
       [1.2       , 2.15666667, 3.13      , 4.41      , 2.11      ],
       [0.99      , 1.98      , 3.        , 4.14      , 2.15666667]])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值