如何让数组按列求均值时,含NaN的列结果为NaN?
实现列含NaN则结果保留NaN的均值计算
你想要的效果是:当数组的某一列里存在NaN时,该列的计算结果就保留NaN,而不是忽略NaN去算其他值的均值对吧?其实只需要两步就能搞定:
- 第一步:先检查每一列是否包含NaN
- 第二步:对包含NaN的列返回NaN,不包含的列正常用
np.nanmean计算均值
直接上代码示例:
import numpy as np # 你的原始数组 a = np.array([[1, np.nan], [3, 4]]) # 第一步:判断每一列是否存在NaN has_nan_in_col = np.isnan(a).any(axis=0) # 第二步:根据判断结果生成最终数组 custom_result = np.where(has_nan_in_col, np.nan, np.nanmean(a, axis=0)) print(custom_result) # 输出:array([ 2., nan])
简单解释下逻辑:
np.isnan(a).any(axis=0)会遍历每一列,只要该列有至少一个NaN,就返回True,否则返回False,最终得到一个和列数一致的布尔数组。np.where会根据这个布尔数组做分支选择:如果是True(该列含NaN),就取np.nan;如果是False,就取np.nanmean计算出来的正常均值。
这样就刚好得到你想要的结果啦!
内容的提问来源于stack exchange,提问作者Fanglin
相关产品推荐
相关产品推荐

