如何将numpy数组中的nan值填充为对应列的均值
按列均值填充numpy数组nan的高效实现方法
直接使用numpy向量化操作即可实现需求,完全不需要遍历列,性能远优于Python层面的循环实现,以下是两种常用方案:
方案1:纯numpy实现(无额外依赖)
用np.nanmean计算各列忽略nan的均值,配合np.where和广播机制直接填充,示例代码如下:
import numpy as np # arr 为你从DataFrame转换得到的二维numpy数组 # 计算各列均值(自动跳过nan) col_means = np.nanmean(arr, axis=0) # 按列填充nan arr = np.where(np.isnan(arr), col_means[np.newaxis, :], arr)
如果需要原地修改(类似inplace=True效果),可以改用掩码赋值的写法:
nan_mask = np.isnan(arr) arr[nan_mask] = np.take(col_means, np.where(nan_mask)[1])
方案2:scikit-learn SimpleImputer实现(适合机器学习预处理场景)
如果你的场景是数据建模的预处理环节,用SimpleImputer更规范,还支持后续复用填充规则:
from sklearn.impute import SimpleImputer # 初始化填充器,策略为按列均值填充 imputer = SimpleImputer(strategy='mean') # 拟合数据同时完成填充 arr = imputer.fit_transform(arr)
两种方案均为底层C实现的向量化运算,相比Python层面遍历列的实现,数据量越大性能优势越明显。
内容的提问来源于stack exchange,提问作者Olli
相关产品推荐
相关产品推荐

