You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用NumPy内置功能合并矩阵列,取每行首个非nan值

可以直接通过NumPy内置函数实现,核心逻辑是逐行定位第一个非nan值的位置,再按索引取值后转换为单列矩阵即可,实现代码如下:

import numpy as np

# 你的输入矩阵,此处用示例矩阵演示
arr = np.array([[np.nan, np.nan],
                [np.nan, np.nan],
                ['value 1', np.nan],
                [np.nan, np.nan],
                [np.nan, np.nan],
                [np.nan, 'value 2']], dtype=object)

# 1. 生成非nan值的布尔掩码,兼容混合字符串、数值的object类型数组
not_nan_mask = np.vectorize(lambda x: not np.isnan(x) if isinstance(x, float) else True)(arr)

# 2. 取每行第一个非nan值的索引,全nan行默认返回索引0(对应值仍为nan)
first_col_idx = np.argmax(not_nan_mask, axis=1)

# 3. 按索引取值并转为单列矩阵
res = arr[np.arange(arr.shape[0]), first_col_idx, None]

输出的res就是你需要的结果:

array([[nan],
       [nan],
       ['value 1'],
       [nan],
       [nan],
       ['value 2']], dtype=object)

规则适配说明

  • 单行存在多个非nan值时,np.argmax会返回第一个非nan值的位置,符合优先取第一个的要求
  • 整行全为nan时,返回的结果对应位置仍为nan
  • 兼容字符串、浮点型、整型混合存储的object类型矩阵

内容的提问来源于stack exchange,提问作者ljuk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 10:00:06