如何统计二维ndarray各列的NaN值数量并保存为ndarray
统计ndarray每列NaN值数量的正确方法
你原来的代码np.count_nonzero(np.isnan(arr))会把所有列的NaN值加起来得到总数,要按列单独统计,只需要给count_nonzero指定axis=0参数,让它沿着行的方向(也就是针对每一列)统计非零元素的数量——因为np.isnan(arr)会把NaN转为布尔值True(等价于1),非NaN转为False(等价于0),所以统计结果就是每列的NaN数量。
具体代码如下:
import numpy as np # arr是你的(2000,7)形状ndarray number_nan_per_col = np.count_nonzero(np.isnan(arr), axis=0)
执行后number_nan_per_col会是一个形状为(7,)的ndarray,每个元素对应原数组对应列的NaN值数量。
另外也可以用np.sum实现同样的效果,原理是对布尔数组按列求和(True算1,False算0):
number_nan_per_col = np.sum(np.isnan(arr), axis=0)
你可以用测试数据验证:
# 创建测试数组 arr = np.random.rand(2000, 7) # 随机插入一些NaN值 arr[np.random.choice(2000, 150), np.random.choice(7, 150)] = np.nan # 统计每列NaN数 nan_counts = np.count_nonzero(np.isnan(arr), axis=0) print(nan_counts.shape) # 输出 (7,) print(nan_counts) # 打印每列的NaN数量
内容的提问来源于stack exchange,提问作者SebastianHeeg
相关产品推荐
相关产品推荐

